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

我目前在我的主包中有一个名为main.go. main.go由于代码不可重用,如何在不创建单独包的情况下将 的内容拆分为多个文件。


我想要这样的目录结构:


$ ls foo


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


三国纷争
浏览 199回答 3
3回答

catspeake

2019 年 7 月 26 日更新(适用于 >=1.11)go run .原答案上面的代码确实有效。问题是我需要跑go run *.go代替go run main.go

万千封印

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 会话中不起作用,因为外壳不进行通配符扩展。

慕斯王

在我看来,这个问题的最佳答案隐藏在对最高答案的评论中。只需运行这个:go run .这将运行主包中的所有文件,但不会给出类似的错误消息go run: cannot run *_test.go files (main_test.go)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go