问题
在 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 |
以上。