【Go】go build 失败,报方法 undefined
记一次在写 cli 脚本的时候,碰到的一个问题。
问题
自己是写服务端的,有时候会写一些 cli 脚本去跑测试。习惯 main.go 写主流程,其他子文件写方法,这样子代码不会都在 main.go 里面。但这么写直接 GoLand 点击 main 旁边的按钮是可以执行,一旦用 go build 就报某个引用的方法,undefined。
范例代码
复制代码
复制代码
注意这是两个文件,不是都在 main.go 里面,package 都是 main。这两个文件,都在同一个目录下面。
操作
直接点击 run,结果是有的,也没有报错
go build 就报错,原本调用的方法 undefined
但是上一步可以执行呀,也有结果
解决
原因是 go 语言中 main 包和其他 package 是不同的,它定义了一个独立可执行程序,而不是一个库。一般的包名是.go 文件的目录名,编译器会将同一目录下的不同.go 文件视作同一个包。但是 main 包的目录不是 main 目录,所以问题就是在包的引用和定义上,如果想在 main 包中添加函数调用,2 个方法:
写在 main 函数所在的 go 文件中;
创建另一个 package,main 函数去调用这个包。【建议】
修改后代码
复制代码
operation.go 放到一个单独的包
复制代码
此时再 go build 就可以解决了。
评论