【问题标题】:go build works fine but go run failsgo build 工作正常,但 go run 失败
【发布时间】:2014-02-13 02:31:48
【问题描述】:

我在一个目录下的主包中有几个文件:

main.go 配置文件 server.go

当我这样做时:“开始构建”,程序构建完美并且运行良好。 当我这样做时:“go run main.go”它失败了。

输出:

# command-line-arguments
./main.go:7: undefined: Config
./main.go:8: undefined: Server

未定义的符号是结构,它们是大写的,所以应该被导出。

我的 Go 版本:go1.1.2 linux/amd64

【问题讨论】:

  • main.goconfig.goserver.go 对应的 package 是什么?如果你要运行它们,所有三个都必须有package main
  • 他们三个都有主包。
  • 请记住,go run 是相当有限的。您应该使用 go build 来构建您的包并使用 ./packagename 或 packagename 运行它(如果它在您的 PATH 上)。
  • 无需 go run 即可轻松构建和执行:"go build && ./packagename"

标签: compilation compiler-errors go


【解决方案1】:

这应该可以工作

go run main.go config.go server.go

Go run takes a file or files 并且它只符合那些解释原始帖子中缺失符号的文件。

【讨论】:

  • 这确实有效,但奇怪的是外部导入(您放入 import() 中的那些)可以完美地工作,而无需我在命令行上指定它们。
  • @RoelVanNyen 这一点都不奇怪——因为它们是导入的,go 工具链知道在哪里寻找它们
  • 如果配套包是通过 go run 自动导入的,那就太好了
  • @RoelVanNyen 你为什么不建议go run *.go
  • 对我来说有一个副作用:$ go run *.gogo run: cannot run *_test.go files (main_test.go)围绕这个有一个讨论here
【解决方案2】:

你可以这样执行:

go run .

因此您不必手动包含所有文件。

【讨论】:

    猜你喜欢
    • 2018-09-19
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多