如何 "go run" 主包中包含多个文件的项目?
How can I "go run" a project with multiple files in the main package?
我在 main
包中有一个名为 main.go
的文件。因为代码不可重用,所以我想将部分代码放在不同的文件中,但放在同一个包中。
如何在不创建单独包的情况下将 main.go
的内容拆分为多个文件?
我想要这样的目录结构:
ls foo
# output:
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
2019 年 7 月 26 日更新(适用于 go >=1.11)
go run .
也将在 windows 上工作。
原始答案(针对非 windows 环境)
代码确实有效。问题是我应该 运行:
而不是 运行ning go run main.go
go run *.go
2018 年 8 月更新,Go 1.11, a section "Run" 状态:
The go run
command now allows a single import path, a directory name or a pattern matching a single package.
This allows go run pkg
or go run dir
, most importantly go run .
原始答案 2015 年 1 月
如“How to compile Go program consisting of multiple files?", go run
中所述,需要一个文件列表,因为它 "compiles and runs the main
package comprising the named Go source files"。
所以你当然可以用 go run
.
将你的 main
包分成几个文件
这与 go build/go install
不同,后者需要包名(而不是文件名)。
一个简单的 go build
将生成一个以父文件夹命名的可执行文件。
请注意,作为 illustrated by this thread, a go run *.go
wouldn't work in a Windows CMD session, since the shell doesn't do wildcard expansion。
对于 Windows 安装 Cygwin 并使用它代替命令提示符。 "go run *.go" 就可以了。
如前所述,您可以说 go run *.go
但对于 Windows 您可以只列出脚本文件(因为 *.go 将不起作用)- go run main.go other.go third.go
如果您尝试使用最新版本 (1.11) 中的 gorilla mux 在本地主机上 运行 多个文件。尝试使用以下 2 个命令中的任何一个。
go install && FolderName -port 8081 .
go build && ./FolderName -port 8081.
在终端中执行命令之前,请确保您位于源文件夹中,即 go/src/FolderName。
在我看来,这个问题的最佳答案隐藏在置顶答案的评论中。
就运行这个:
go run .
这将 运行 主包中的所有文件,但 不会 给出类似
的错误消息
go run: cannot run *_test.go files (main_test.go)
感谢@BarthesSimpson
第一个方法是 运行
go run *.go
另一种方法是生成exe文件
go build
然后运行那个.exe文件
./filename.exe
我在 main
包中有一个名为 main.go
的文件。因为代码不可重用,所以我想将部分代码放在不同的文件中,但放在同一个包中。
如何在不创建单独包的情况下将 main.go
的内容拆分为多个文件?
我想要这样的目录结构:
ls foo
# output:
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
2019 年 7 月 26 日更新(适用于 go >=1.11)
go run .
也将在 windows 上工作。
原始答案(针对非 windows 环境)
代码确实有效。问题是我应该 运行:
而不是 运行ninggo run main.go
go run *.go
2018 年 8 月更新,Go 1.11, a section "Run" 状态:
The
go run
command now allows a single import path, a directory name or a pattern matching a single package.
This allowsgo run pkg
orgo run dir
, most importantlygo run .
原始答案 2015 年 1 月
如“How to compile Go program consisting of multiple files?", go run
中所述,需要一个文件列表,因为它 "compiles and runs the main
package comprising the named Go source files"。
所以你当然可以用 go run
.
main
包分成几个文件
这与 go build/go install
不同,后者需要包名(而不是文件名)。
一个简单的 go build
将生成一个以父文件夹命名的可执行文件。
请注意,作为 illustrated by this thread, a go run *.go
wouldn't work in a Windows CMD session, since the shell doesn't do wildcard expansion。
对于 Windows 安装 Cygwin 并使用它代替命令提示符。 "go run *.go" 就可以了。
如前所述,您可以说 go run *.go
但对于 Windows 您可以只列出脚本文件(因为 *.go 将不起作用)- go run main.go other.go third.go
如果您尝试使用最新版本 (1.11) 中的 gorilla mux 在本地主机上 运行 多个文件。尝试使用以下 2 个命令中的任何一个。
go install && FolderName -port 8081 .
go build && ./FolderName -port 8081.
在终端中执行命令之前,请确保您位于源文件夹中,即 go/src/FolderName。
在我看来,这个问题的最佳答案隐藏在置顶答案的评论中。
就运行这个:
go run .
这将 运行 主包中的所有文件,但 不会 给出类似
的错误消息go run: cannot run *_test.go files (main_test.go)
感谢@BarthesSimpson
第一个方法是 运行
go run *.go
另一种方法是生成exe文件
go build
然后运行那个.exe文件
./filename.exe