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

dav*_*vid 86 naming-conventions go

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

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

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

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

Jim*_*imB 105

有一些准则可供遵循.

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

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

  • 如果我想为`unix`和`others`构建,我应该怎么做.例如,我可以创建两个文件`file_windows.go`和`file_others.go`.它工作正常.但是对于`file_unix.go`和`file_others.go`它确实没有用.我不想创建八个文件`darwin freebsg linux openbsd netbsd dragonfly solaris android`. (3认同)
  • @Fire:文件名通常都是小写的,用于一致性和具有不区分大小写的文件系统的系统. (3认同)
  • 这在哪里记录?谢谢! (2认同)
  • @AbhijeetRastogi:https://golang.org/pkg/go/build/和https://golang.org/cmd/go/ (2认同)

Zam*_*col 18

除了JimB提供答案之外,常规文件名是小写的,简短的,没有任何下划线或空格.通常,文件名遵循与包名称相同的约定.请参阅Effective GoPackage Names部分.

请参阅strconv包以获得一个很好的示例.

  • 你给长文件起什么名字?`mycommandsub1command.go` 或 `my_command_sub1command.go`,以及 `mycommandVO` (7认同)
  • 我会建议长名称的下划线.在一些好的项目中看到了这一点. (5认同)

Mat*_*son 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
Run Code Online (Sandbox Code Playgroud)

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

  • 在您提供的链接中,我找到了带下划线的用例:http://golang.org/src/pkg/compress/bzip2/move_to_front.go,http://golang.org/src/pkg/compress/flate/ huffman_bit_writer.go,http://golang.org/src/pkg/compress/flate/reverse_bits.go. (2认同)
  • 我猜他们将来不会使用 `_front`、`_writer` 或 `_bits` 作为重要的后缀! (2认同)

One*_*One 6

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

它可以是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)