我可以在Go中找到命名包的约定:单词之间没有下划线,一切都是小写的。
此约定是否也适用于文件名?
您是否也将一个结构放在一个文件中,就像您为java类所做的那样,然后在结构后面命名该文件?
目前,如果我有一个struct WebServer,我将它放在web_server.go文件中。
答案 0 :(得分:94)
要遵循一些指导原则。
_test.go
的文件仅由go test
工具编译和运行。name_linux.go
只能在linux上构建,name_amd64.go
只能在amd64上构建。这与文件顶部的//+build amd64
行相同有关详细信息,请参阅go build
工具的文档:https://golang.org/pkg/go/build/
答案 1 :(得分:15)
Go在组织代码的方式方面非常宽松,通常是提高可读性和理解代码的方法。学习如何完成这项工作的最佳方法是研究大师,即浏览标准库:
然而,我可以想到两条规则。指定要为不同平台编译的代码时,请使用平台名称作为后缀:
mypkg_linux.go // only builds on linux systems
mypkg_windows_amd64.go // only builds on windows 64bit platforms
此外,如果您有一个名为server.go
的文件,该文件的测试将位于server_test.go
。
答案 2 :(得分:14)
除了answer provided by JimB之外,常规文件名是小写的,简短的,没有任何下划线或空格。通常,文件名遵循与包名称相同的约定。请参阅Package Names的Effective Go部分。
请参阅strconv package以获得一个好例子。
答案 3 :(得分:6)
通常,文件名中的下划线用于分配平台/仅限arch的代码,例如:
➜ cd $GOROOT/src/pkg/math/
➜ ls sqrt*s
sqrt_386.s sqrt_amd64p32.s sqrt_amd64.s sqrt_arm.s
sqrt_386.s
只能由32位处理器上的编译器读取,amd64上的sqrt_amd64.s
等等。
它可以是GOOS
和/或GOARCH
(ref的任何有效值。
file_windows_amd64.go
将仅在win64上编译。