我目前在我的主包中有一個名為main.go. main.go由于代碼不可重用,如何在不創(chuàng)建單獨包的情況下將 的內(nèi)容拆分為多個文件。我想要這樣的目錄結(jié)構(gòu):$ 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貢獻(xiàn)1111條經(jīng)驗 獲得超0個贊
2019 年 7 月 26 日更新(適用于 >=1.11)
go run .
原答案
上面的代碼確實有效。問題是我需要跑
go run *.go
代替
go run main.go

萬千封印
TA貢獻(xiàn)1891條經(jīng)驗 獲得超3個贊
2018 年 8 月更新,在Go 1.11 中,“運行”部分指出:
該
go run
命令現(xiàn)在允許使用單個導(dǎo)入路徑、目錄名稱或匹配單個包的模式。
這允許go run pkg
或go run dir
,最重要的是go run .
原始答案 2015 年 1 月
正如“如何編譯由多個文件組成的 Go 程序? ”中所述,go run
需要一個文件列表,因為它“編譯并運行main
包含指定 Go 源文件的包”。
所以你當(dāng)然可以將你的main
包分成幾個文件go run
。
這與go build/go install
期望包名(而不是文件名)不同。
一個簡單的方法go build
會生成一個以父文件夾命名的可執(zhí)行文件。
請注意,如該線程所示, ago run *.go
在 Windows CMD 會話中不起作用,因為外殼不進(jìn)行通配符擴展。

慕斯王
TA貢獻(xiàn)1864條經(jīng)驗 獲得超2個贊
在我看來,這個問題的最佳答案隱藏在對最高答案的評論中。
只需運行這個:
go run .
這將運行主包中的所有文件,但不會給出類似的錯誤消息
go run: cannot run *_test.go files (main_test.go)
- 3 回答
- 0 關(guān)注
- 233 瀏覽
添加回答
舉報
0/150
提交
取消