我在main包中只有一个名为main.go的文件。因为代码不可重用,所以我希望将代码的一部分分离到不同的文件中,但在相同的包中。
如何在不创建单独的包的情况下将main.go的内容拆分为多个文件?
我想要一个这样的目录结构:
ls foo
# output:
main.go
bar.gobar.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发布于 2015-01-22 12:59:28
go run .也可以在windows上运行。
原始答案(适用于非windows环境)
代码实际上是可以工作的。问题是我应该运行以下命令,而不是运行go run main.go:
go run *.go发布于 2015-01-22 14:44:20
更新2018年8月,与Go 1.11,一个section "Run"声明:
go run命令现在允许单个导入路径、目录名或与单个包匹配的模式。
这允许go run pkg或go run dir,最重要的是go run .
原答案2015年1月
正如在"How to compile Go program consisting of multiple files?“中提到的,go run需要一个文件列表,因为它”编译并运行包含已命名的Go源文件的main包“。
因此,您当然可以使用go run将您的main包拆分为几个文件。
这与go build/go install不同,后者需要包名(而不是go文件名)。
一个简单的go build将产生一个以父文件夹命名的可执行文件。
注意,作为illustrated by this thread,go run *.go不能在Windows CMD会话中工作,因为shell doesn't do wildcard expansion。
发布于 2019-07-26 18:38:49
在我看来,这个问题的最佳答案隐藏在顶部答案的评论中。
只需运行以下命令:
go run .这将运行main包中的所有文件,但不会给出如下错误消息吗?
go run: cannot run *_test.go files (main_test.go)致敬@BarthesSimpson
https://stackoverflow.com/questions/28081486
复制相似问题