多个文件共用main包的问题

根目录下有三个文件 main.go lib.go go.mod

main.golib.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 .

你可能感兴趣的:(go,golang)