问题
在 github 上 clone 下来了个项目,结构组织很简单就两个文件,类似 main.go 和 a.go。main 函数在 main.go 中, 并且在 main 函数中调用了 a.go 中的函数。
执行 go run main.go 时报错:
1 | > go run main.go |
但执行 go build 却不会报错,且生成可执行文件功能正常。
原因
报错原因是 go run 会先进行编译操作, 但在编译时只会以 main.go 为准, 导致引用其他文件时出现 undefined 的情况。
相反, go build 当没有参数时,它会编译当前目录下的所有 Go 源码文件,生成可执行文件。
方案
方案1 - 老老实实
1 | go run main.go a.go |
方案2 - 简单粗暴
1 | go run *.go |
方案3 - 不管不顾
1 | go build |
以上。