dav*_*vid 86 naming-conventions go
我可以在Go中找到命名包的约定:单词之间没有下划线,一切都是小写的.
此约定是否也适用于文件名?
您是否也将一个结构放在一个文件中,就像您为一个java类所做的那样,然后在结构后面命名该文件?
目前,如果我有一个struct WebServer,我将它放在web_server.go文件中.
Jim*_*imB 105
有一些准则可供遵循.
_test.go
仅由该go test
工具编译和运行.name_linux.go
仅在linux上构建,name_amd64.go
仅构建在amd64上.这//+build amd64
与在文件顶部有一行相同有关go build
详细信息,请参阅该工具的文档:https://golang.org/pkg/go/build/
Zam*_*col 18
除了JimB提供的答案之外,常规文件名是小写的,简短的,没有任何下划线或空格.通常,文件名遵循与包名称相同的约定.请参阅Effective Go的Package Names部分.
请参阅strconv包以获得一个很好的示例.
Mat*_*son 15
就如何在一个包中组织代码而言,Go是非常宽松的,通常是提高可读性和理解代码的任何东西.学习如何完成这项工作的最佳方法是学习大师,即浏览标准库:
然而,我可以想到两条规则.指定要为不同平台编译的代码时,使用平台名称作为后缀:
mypkg_linux.go // only builds on linux systems
mypkg_windows_amd64.go // only builds on windows 64bit platforms
Run Code Online (Sandbox Code Playgroud)
此外,如果您有一个名为的文件server.go
,该文件的测试将在server_test.go
.
通常,文件名中的下划线用于分配平台/仅限arch的代码,例如:
? cd $GOROOT/src/pkg/math/
? ls sqrt*s
sqrt_386.s sqrt_amd64p32.s sqrt_amd64.s sqrt_arm.s
Run Code Online (Sandbox Code Playgroud)
sqrt_386.s
只能由编译器在32位处理器,sqrt_amd64.s
amd64等上读取.
它可以是GOOS
和/或的任何有效值GOARCH
(参考.
file_windows_amd64.go
将仅在win64上编译.
小智 5
文件名全部使用小写字母是一个糟糕的主意!
文件名在 go 中没有语义含义 - 它们不会被导入或引用。go 中的代码文件被编译到它们被分配到的包中作为一个单元。
由于 effective go 中的文章不包括对除下划线之外的多字文件名的限制(用于构建、忽略、测试和编译目的),因此混合大写字母是多字文件名约定的最佳选择。和同一篇文章“有效走”推荐的
太尔;博士:
- smallallcupspackagename
|- veryLongFileName.go
|- veryLongFileName_test.go
|- veryLongFileName_amd64_windows.go
Run Code Online (Sandbox Code Playgroud)