根目录下有两个文件 main.go lib.go go.mod
main.go
和 lib.go
中都属于main
包
代码如下
main.go
package main
func main() {
Api()
}
lib.go
package main
import "fmt"
func Api() {
fmt.Println("hello world")
}
go.mod
module wire_test
go 1.22.7
运行时报错
go run main.go
发生了报错
.\main.go:4:2: undefined: Api
说明编译器在运行时,只会编译和运行你直接提供的文件
但如果 main.go
中的main
方法里引用的方法是在上方通过显示import
方法引入的,例如标准库的包、或者某个github的包、其它文件夹的包
由于有go.mod
的存在,运行go run main.go
则不会报错,自动引入其它包
上方的Api
方法是本包内的程序,无需显示声明引用,所以运行go run main.go
时,只编译了main.go
这个文件
解决方法
只需在编译时指定打包的文件即可,例如
# 这几种都可以
go run main.go lib.go
go build -o myapp
go build .
go run .