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


114

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

这个约定也适用于文件名吗?

您是否也像在Java类中那样将一个结构放在一个文件中,然后以该结构命名?

当前,如果我具有结构WebServer,则将其放在文件web_server.go中。


3
AFAIK没有约定,但是_后缀将来可能具有特殊的语义,因此我建议避免使用它们。
2014年

Answers:


126

有一些准则可以遵循。

  1. 以“。”开头的文件名。或“ _”被go工具忽略
  2. 带后缀的文件_test.go只能由该go test工具编译和运行。
  3. 具有os和特定于体系结构的后缀的文件会自动遵循相同的约束,例如name_linux.go仅在linux上构建,name_amd64.go仅在amd64上构建。这//+build amd64与文件顶部有一行相同

有关go build更多详细信息,请参阅该工具的文档:https : //golang.org/pkg/go/build/


3
这在哪里记录?谢谢!
Abhijeet Rastogi


3
如果我想为建造unix和建造我应该做些什么others。例如,我可以制作两个文件file_windows.gofile_others.go。它工作正常。但是file_unix.gofile_others.go这是行不通的。我不想创建八个文件darwin freebsg linux openbsd netbsd dragonfly solaris android
伊万·布莱克

3
@Fire:文件名通常都是小写,以保持一致性以及不区分大小写的文件系统。
JimB 2015年

1
对于与@IvanBlack有相同问题的任何人,都可以使用构建标记来完成。在这里看到的是如何做到这一点很好的概述:dave.cheney.net/2013/10/12/...
伊恩·古斯塔夫森

30

除了JimB提供答案外,常规文件名还使用小写字母,简短且没有任何下划线或空格。通常,文件名遵循与程序包名称相同的约定。请参阅有效Go的“ 程序包名称”部分。

参见strconv软件包中的一个很好的例子。


3
你给长文件起什么名字? mycommandsub1command.gomy_command_sub1command.go,以及如何处理mycommandVO
user2727195

9
对于长名称,我建议使用下划线。在一些好的项目中已经看到了这一点。
Avi

17

就如何在一个程序包中组织代码而言,Go是相当自由的,通常它可以提高可读性和对代码的理解。学习如何做到这一点的最好方法是学习大师,即浏览标准库:

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

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

mypkg_linux.go         // only builds on linux systems
mypkg_windows_amd64.go // only builds on windows 64bit platforms

另外,如果您有一个名为的文件server.go,则对该文件的测试将在中server_test.go



1
我想他们不会使用_front_writer_bits作为未来显著后缀呢!
马特·哈里森

我喜欢Go,但是该go工具对程序包的结构有严格的限制(这是我最喜欢的语言之一)。它支持某些非常特定的约定(每个文件夹一个软件包(至少有一个例外),文件夹的软件包与文件夹共享相同的名称(至少有一个例外),完整的软件包导入路径与中的相对路径匹配$GOPATH,有些文件是根据名称格式等进行不同的处理)
weberc2 2014年

1
@ weberc2限制类似于Latex。首先,我想控制自己的布局和其他不相关的细节,直到我意识到需要编写的所有内容都是不错的内容。同样,Go使我们能够编写出色的代码并为我们处理其他细节。
大卫2014年

@大卫我同意。回想起来,我不清楚:我在回答答辩人的陈述Go is quite liberal in terms of how you organise your code within a package。Go不是自由的,它是限制性的。但这是一件好事。
weberc2 2014年

8

通常,文件名中的下划线用于分配仅平台/ 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位处理器,sqrt_amd64.samd64等上读取。

它可以是GOOSand / or GOARCHref

file_windows_amd64.go 将仅在win64上编译。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.