回答:
従うべきいくつかのガイドラインがあります。
_test.go
が付いたファイルは、go test
ツールによってのみコンパイルおよび実行されます。name_linux.go
、Linuxでname_amd64.go
のみビルドされ、amd64でのみビルドされます。これは、//+build amd64
ファイルの最上部に行があるのと同じです詳細については、go build
ツールのドキュメントを参照してください:https : //golang.org/pkg/go/build/
unix
とothers
。例えば、私は2つのファイルを作ることができるfile_windows.go
とfile_others.go
。正常に動作します。しかしfile_unix.go
、file_others.go
それはうまくいきません。8つのファイルを作成したくありませんdarwin freebsg linux openbsd netbsd dragonfly solaris android
。
JimBが提供する回答に加えて、通常のファイル名は小文字で短く、アンダースコアやスペースはありません。通常、ファイル名はパッケージ名と同じ規則に従います。効果的なGoのパッケージ名のセクションを参照してください。
良い例はstrconvパッケージを見てください。
mycommandsub1command.go
またはmy_command_sub1command.go
、そしてどうでしょうmycommandVO
Goは、パッケージ内でコードをどのように整理するかという点で非常に寛大です。通常、コードの可読性と理解を向上させるものです。これがどのように行われるかを学ぶ最良の方法は、マスターを研究することです。つまり、標準ライブラリを閲覧します。
しかし、私が考えることができる2つのルールがあります。異なるプラットフォーム用にコンパイルするコードを指定するときは、プラットフォーム名を接尾辞として使用します。
mypkg_linux.go // only builds on linux systems
mypkg_windows_amd64.go // only builds on windows 64bit platforms
またserver.go
、というファイルがある場合、そのファイルのテストはにありますserver_test.go
。
_front
、_writer
または_bits
、将来の大幅な接尾辞として!
go
ですが、このツールはパッケージ構造に関して非常に制限があります(言語に関して私のお気に入りの1つです)。それはいくつかの非常に特定の規則を支持します(フォルダーごとに1つのパッケージ(少なくとも1つの例外を含む)、フォルダーのパッケージはフォルダーと同じ名前を共有します(少なくとも1つの例外を含みます)、完全なパッケージインポートパスはからの相対パスに一致し$GOPATH
、いくつかのファイルは名前の形式などに応じて異なる方法で処理されます)
Go is quite liberal in terms of how you organise your code within a package
。囲碁は自由ではなく、かなり制限的です。しかし、それは良いことです。
通常、ファイル名の下線は、プラットフォーム/アーキテクチャのみのコードを割り当てるために使用されます。次に例を示します。
➜ 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.s
amd64などのコンパイラでのみ読み取られます。
これは、有効な値のいずれかとすることができるGOOS
、および/またはGOARCH
(REF。
file_windows_amd64.go
win64でのみコンパイルされます。