如何“运行”主包中包含多个文件的项目?

新手上路,请多包涵

我在 main 包中有一个名为 main.go 的文件。因为代码不可重用,所以我想将部分代码放在不同的文件中,但放在同一个包中。

如何将 main.go 的内容拆分为多个文件而不创建单独的包?

我想要这样的目录结构:

 ls foo

# output:
main.go
bar.go

  • 文件: bar.go
 package main

import "fmt"

func Bar() {
  fmt.Println("Bar")
}

  • 文件: main.go
 package main

func main() {
  Bar()
}

当我运行 go run main.go 时,它给了我:

 # command-line-arguments
./main.go:4:2: undefined: Bar

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

阅读 1k
2 个回答

2019 年 7 月 26 日更新(适用于 go >=1.11)

 go run .

也适用于 Windows。

原答案(针对非windows环境)

该代码确实有效。问题是,我应该 go run main.go

 go run *.go

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

2018 年 8 月更新,在 Go 1.11 中, “运行”部分 说明:

go run 命令现在允许单个导入路径、目录名称或匹配单个包的模式。

这允许 go run pkggo run dir ,最重要的是 go run .


原始答案 2015 年 1 月

如“ 如何编译由多个文件组成的 Go 程序? ”中所述, go run 需要一个文件列表,因为它“编译并运行 main 包含指定 Go 源文件的包”。

所以你当然可以将你的 main 包分成几个文件 go run

这不同于 go build/go install 需要包名(而不是文件名)。

一个简单的 go build 将生成一个以父文件夹命名的可执行文件。

请注意,如 该线程所示go run *.go 在 Windows CMD 会话中不起作用,因为 shell 不进行通配符扩展

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

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