web-dev-qa-db-ja.com

Goのファイル名の規則は何ですか?

Goでパッケージの命名規則を見つけることができました。単語間にアンダースコアはなく、すべて小文字です。

この規則はファイル名にも適用されますか?

Javaクラスに対して行ったように、1つのファイルに1つの構造体を配置し、構造体の後にファイル名を付けますか?

現在、WebServer構造体がある場合、web_server.goファイルに配置します。

79
david

従うべきいくつかのガイドラインがあります。

  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/

101
JimB

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にあります。

15
Matt Harrison

JimBが提供する回答 に加えて、通常のファイル名は小文字で短く、アンダースコアやスペースは一切含まれません。通常、ファイル名はパッケージ名と同じ規則に従います。 Effective Goパッケージ名 セクションを参照してください。

良い例については、 strconv package をご覧ください。

15
Zamicol

通常、ファイル名のアンダースコアは、プラットフォーム/アーカイブのみのコードを割り当てるために使用されます。例:

➜ 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などによってのみ読み取られます。

GOOSGOARCHref の有効な値のいずれかを指定できます。

file_windows_AMD64.goはwin64でのみコンパイルされます。

6
OneOfOne