我目前在我的主程序包中有一个名为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
答案 0 :(得分:161)
上面的代码实际上有效。问题是我需要运行
go run *.go
而不是
go run main.go
答案 1 :(得分:63)
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
需要一个文件列表,因为它"编译并运行包含命名的main
包去源文件"。
因此,您当然可以将main
个包与go run
分成几个文件。
这与期望包名称(而不是文件名)的go build/go install
不同
一个简单的go build
将产生一个以父文件夹命名的可执行文件。
请注意,作为illustrated by this thread,go run *.go
无法在Windows CMD会话中工作,因为shell doesn't do wildcard expansion。
答案 2 :(得分:4)
如上所述,您可以说go run *.go
,但是对于Windows,您可以只列出脚本文件(因为* .go无法使用)-go run main.go other.go third.go
答案 3 :(得分:0)
对于Windows安装Cygwin并使用它而不是命令提示符。 “go run * .go”将会起作用。
答案 4 :(得分:0)
如果您尝试按照最新版本(1.11)使用gorilla mux在localhost上运行多个文件。尝试使用以下2条命令中的任何一条。
转到install && FolderName -port 8081。
开始构建&& ./FolderName -port 8081。
在终端中执行命令之前,请确保您位于源文件夹(即go / src / FolderName)中。
答案 5 :(得分:0)
我认为,对这个问题的最佳答案隐藏在对最高答案的评论中。
只需运行:
aggregate
这将运行主程序包中的所有文件,但不会给出错误消息,例如
go run .
对@BarthesSimpson表示敬意
答案 6 :(得分:0)
执行此操作的第一种方法是运行
go run *.go
另一种方法是生成一个exe文件
go build
然后运行该.exe文件
./filename.exe