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


114

Goでパッケージの命名規則を見つけることができました。単語間に下線を付けず、すべて小文字にします。

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

また、Javaクラスの場合と同じように、1つの構造体を1つのファイルに入れ、構造体の名前をファイルに付けますか?

現在、構造体WebServerがある場合は、web_server.goファイルに入れます。


3
AFAIKには慣例はありませんが、_サフィックスには将来的に特別なセマンティクスが含まれる可能性があるため、使用しないことをお勧めします。
fuz 2014

回答:


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 2015年

2
@AbhijeetRastogi:golang.org/pkg/go/buildおよびgolang.org/cmd/go
JimB

3
私は私が作成したいときに行うようにすべきであるunixothers。例えば、私は2つのファイルを作ることができるfile_windows.gofile_others.go。正常に動作します。しかしfile_unix.gofile_others.goそれはうまくいきません。8つのファイルを作成したくありませんdarwin freebsg linux openbsd netbsd dragonfly solaris android
Ivan Black

3
@Fire:ファイル名は、一貫性と大文字と小文字を区別しないファイルシステムの両方のシステムの両方で、通常はすべて小文字です。
JimB

1
@IvanBlackと同じ質問を持つ人は、ビルドタグを使用してこれを実行できます。ことを行う方法の素敵な概要についてはこちらをご覧ください:dave.cheney.net/2013/10/12/...
イアン・グスタフソン

30

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

良い例はstrconvパッケージを見てください。


3
長いファイルに名前を付けますか? mycommandsub1command.goまたはmy_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


3
あなたが提供されるリンクでは、私は、アンダースコアでユースケースを見つけました:golang.org/src/pkg/compress/bzip2/move_to_front.gogolang.org/src/pkg/compress/flate/huffman_bit_writer.gogolang.org/ src / pkg / compress / flate / reverse_bits.go
david 2014

1
私は、彼らが使用することはありません推測し_front_writerまたは_bits、将来の大幅な接尾辞として!
Matt Harrison

私はGoが大好きgoですが、このツールはパッケージ構造に関して非常に制限があります(言語に関して私のお気に入りの1つです)。それはいくつかの非常に特定の規則を支持します(フォルダーごとに1つのパッケージ(少なくとも1つの例外を含む)、フォルダーのパッケージはフォルダーと同じ名前を共有します(少なくとも1つの例外を含みます)、完全なパッケージインポートパスはからの相対パスに一致し$GOPATH、いくつかのファイルは名前の形式などに応じて異なる方法で処理されます)
weberc2 2014

1
@ weberc2制限はLatexに類似しています。まず、作成する必要のあるものがすべて適切なコンテンツであることがわかるまで、レイアウトやその他の無関係な詳細を制御したいと思いました。同様に、Goを使用すると、適切なコードを記述し、他の詳細を処理できます。
デビッド2014

@david同意する。振り返ってみると、私は不明確でした。私は、回答者の声明に応えていましたGo is quite liberal in terms of how you organise your code within a package。囲碁は自由ではなく、かなり制限的です。しかし、それは良いことです。
weberc2 14

8

通常、ファイル名の下線は、プラットフォーム/アーキテクチャのみのコードを割り当てるために使用されます。次に例を示します。

 cd $GOROOT/src/pkg/math/
 ls sqrt*s
sqrt_386.s  sqrt_amd64p32.s  sqrt_amd64.s  sqrt_arm.s

sqrt_386.s32ビットプロセッサ、sqrt_amd64.samd64などのコンパイラでのみ読み取られます。

これは、有効な値のいずれかとすることができるGOOS、および/またはGOARCHREF

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.