我目前在我的主包中有一个名为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
万千封印
TA贡献1891条经验 获得超3个赞
2018 年 8 月更新,在Go 1.11 中,“运行”部分指出:
该
go run
命令现在允许使用单个导入路径、目录名称或匹配单个包的模式。
这允许go run pkg
或go 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 会话中不起作用,因为外壳不进行通配符扩展。
慕斯王
TA贡献1864条经验 获得超2个赞
在我看来,这个问题的最佳答案隐藏在对最高答案的评论中。
只需运行这个:
go run .
这将运行主包中的所有文件,但不会给出类似的错误消息
go run: cannot run *_test.go files (main_test.go)
- 3 回答
- 0 关注
- 198 浏览
添加回答
举报
0/150
提交
取消