多个文件共用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 .
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容