平时写 Go 代码,最头疼的莫过于编译报错。别慌,很多错误其实就那么几种套路。今天咱们就来盘一盘那些常见的 Golang 编译错误,以及它们到底在说什么。

undefined: xxx—— 这个最常见了,意思是某个变量、常量或函数根本没定义。检查一下是不是拼写错了,或者忘了声明、忘了初始化。cannot use xxx (type xxx) as type yyy in argument—— 类型不匹配,你把一个类型 A 的值传给了需要类型 B 的参数。看看函数签名,确认参数类型对不对得上。type xxx is not an expression—— 把类型名当成了表达式来用,比如写了int(3)没问题,但直接写int当值用就不行。记住,类型本身不是值。syntax error: unexpected xxx, expecting yyy—— 语法解析碰到了意外标记。多半是少了括号、分号、花括号什么的,或者逗号放错位置。仔细看看提示的“意外”和“期望”是什么。multiple-value xxx() in single-value context—— 函数返回了多个值,但你只用一个变量去接。比如val := someFunc(),但 someFunc 返回了两个值。要么用两个变量接收,要么用_忽略掉不需要的。cannot find package "xxx" in any of—— 包找不到。先确认是否执行了go mod tidy或者go get,检查 GOPATH、GOROOT 以及模块路径是否写对了。imported and not used: xxx—— 导入了包但没用到。虽然 Go 编译器允许你保留(但会报错),最好还是删掉,保持代码整洁。如果确实需要副作用导入,用_别名。
这些错误几乎覆盖了日常开发中九成以上的编译报错。遇到报错时,别急着复制粘贴去问人,先自己读一读错误信息——它其实已经把问题指得很清楚了。如果还是搞不定,翻翻官方文档或者去社区搜一下,通常都能找到答案。