同一包中的功能未定义

新手上路,请多包涵

我的项目结构是这样的。

 packagetest/
    main.go
    lib.go

main.go 中,我有这段代码。

 package main

import "fmt"

func main() {
    fmt.Println("Hello from main.go.")
    Test()
}

lib.go 中,我有这段代码。

 package main

import "fmt"

func Test() {
    fmt.Println("This is the Test function in lib.go.")
}

当我尝试使用 go build main.go 编译时,我得到 ./main.go:7: undefined: Test 。这种构建代码的方式是否可行?

原文由 425nesp 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 644
2 个回答

尝试只运行 go build 。当你给它一个 go 文件作为参数时,它不会寻找其他 go 文件。你也可以做 go build *.go

原文由 Stephen Weinberg 发布,翻译遵循 CC BY-SA 3.0 许可协议

这是一篇旧帖子,但它没有清楚地回答我的问题,所以我发帖是为了以后其他人的利益。

当运行 go run --help 你会发现这个手册:

Run 编译并运行包含指定 Go 源文件的主包。 Go 源文件被定义为以文字“.go”后缀结尾的文件。

默认情况下,“go run”直接运行编译后的二进制文件:“a.out arguments…”。

go run <filename.go> 用于只有几个文件的小程序。对于多个文件,您将遇到一个问题,您的 main.go 找不到其他文件,因为 go run 除非命名,否则不会隐式编译和链接它们。这就是 go build 项目有效的原因。

或者, go run *.go (构建所有文件)应该在大部分时间都有效。

原文由 Pandemonium 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题