Go中文件名的约定是什么?

时间:2014-08-06 13:32:55

标签: go naming-conventions

我可以在Go中找到命名包的约定:单词之间没有下划线,一切都是小写的。

此约定是否也适用于文件名?

您是否也将一个结构放在一个文件中,就像您为java类所做的那样,然后在结构后面命名该文件?

目前,如果我有一个struct WebServer,我将它放在web_server.go文件中。

4 个答案:

答案 0 :(得分:94)

要遵循一些指导原则。

  1. 以"。"开头的文件名或" _"被go工具忽略
  2. 后缀为_test.go的文件仅由go test工具编译和运行。
  3. 具有操作系统和体系结构特定后缀的文件会自动遵循相同的约束条件,例如: name_linux.go只能在linux上构建,name_amd64.go只能在amd64上构建。这与文件顶部的//+build amd64行相同
  4. 有关详细信息,请参阅go build工具的文档:https://golang.org/pkg/go/build/

答案 1 :(得分:15)

Go在组织代码的方式方面非常宽松,通常是提高可读性和理解代码的方法。学习如何完成这项工作的最佳方法是研究大师,即浏览标准库:

http://golang.org/src/pkg/

然而,我可以想到两条规则。指定要为不同平台编译的代码时,请使用平台名称作为后缀:

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 NamesEffective 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和/或GOARCHref的任何有效值。

file_windows_amd64.go将仅在win64上编译。