为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
三国纷争 2021-09-13 10:18:20
我目前在我的主包中有一个名为main.go. main.go由于代码不可重用,如何在不创建单独包的情况下将 的内容拆分为多个文件。我想要这样的目录结构:$ ls foomain.gobar.gobar.gopackage mainimport "fmt"func Bar() {    fmt.Println("Bar")}然后在 main.gopackage mainfunc main() {    Bar()}但go run main.go给了我:# command-line-arguments./main.go:4:2: undefined: Bar
查看完整描述

3 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

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

go run .

原答案

上面的代码确实有效。问题是我需要跑

go run *.go

代替

go run main.go


查看完整回答
反对 回复 2021-09-13
?
万千封印

TA贡献1891条经验 获得超3个赞

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会生成一个以父文件夹命名的可执行文件。

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


查看完整回答
反对 回复 2021-09-13
?
慕斯王

TA贡献1864条经验 获得超2个赞

在我看来,这个问题的最佳答案隐藏在对最高答案的评论中。

只需运行这个:

go run .

这将运行主包中的所有文件,但不会给出类似的错误消息

go run: cannot run *_test.go files (main_test.go)


查看完整回答
反对 回复 2021-09-13
  • 3 回答
  • 0 关注
  • 198 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信