`go run` 默认只编译指定的单个文件,若项目由多个 `.go` 文件组成(如 `main.go` 和 `main2.go`),需显式列出所有源文件或使用通配符,才能使跨文件定义的函数被正确识别和调用。
在 Go 中,一个包(例如 package main)可以由多个 .go 文件共同构成,但 go run 命令的行为与 go build 或 go test 不同:它不会自动扫描当前目录下所有属于同一包的源文件,而是仅编译你明确传入的参数文件。
例如,当你的项目结构如下:
main.go main2.go
其中:
此时执行 go run main.go 会报错:
undefined: somefunc
因为 main2.go 未被包含在编译范围内,somefunc 对 main.go 不可见。
✅ 正确做法是显式指定所有参与构建的源文件:
go run main.go main2.go
或者使用 shell 通配符(推荐用于小型项目,但需注意排除测试文件):
go run *.go
⚠️ 注意事项:

? 小技巧:开发调试阶段,也可直接运行 go build -o app && ./app,它天然支持整包编译,语义更清晰、行为更稳定。