📘
Golangでの命名規則におけるベストプラクティス
Golangの設計思想
Golangは、「単純さ」と「読みやすさ」を重視している言語です。そのため、ソースコードを保守のために、いくつかの単純な規則を採用しています。
この記事では、GoチュートリアルとEffectiveGoを参考にしています。
ファイル名
- Goは、ソースファイルがすべて小文字で、複数の単語をアンダースコアで区切るという規則に従います。
- 複合ファイル名は_で区切られます。
- 「
.
」で始まるファイル名 または「_
」はgoツールによって無視されます。 - 接尾辞「
_test.go
」が付いたファイルは、go test
ツールによってのみコンパイルおよび実行されます。
$ ls
dataloader.go
dataloader_test.go
callback_api.go
callback_api_test.go
関数とメソッド
キャメルケースを使用します。エクスポートされる関数は大文字で始める必要があります。
functions.go
package functions
//1. エクスポートされておらず、パッケージ内でのみ表示されます
func writeToDB() {
}
//2. エクスポートされ、パッケージ内に表示されます
func WriteToDB() {
}
2の場合、functions.WriteToDB()
で呼び出し可能。
定数
定数はすべて大文字を使用し、単語を区切るにはアンダースコアを使用する必要があります。
example.go
const (
MEMBER = iota
ADMIN
ADMIN_MANAGER
)
変数
- 一般に、比較的単純な(短い)名前を使用します。
- ソースコード全体で一貫した命名スタイルを使用する必要があります
example.go
u := user.Get()
uid := u.id
-
bool
など変数の型がある場合は、Has
、Is
、Can
,Allow
で始める
example.go
type User struct {
IsBlocked bool
CanEdit bool
}
- 一文字はインデックスを表します:
i
,j
,k
example.go
for i := 0; i < 10; i++ {
fmt.Println(i)
}
おわりに
今回の記事では、Goにおける命名規則のベストプラクティスについてまとめました。
皆さんのGoライフの一助となれば幸いです。
様々なライブラリの提供者に感謝しつつ、自分も貢献できるように精進します!
twitterでもGolang・Flutter・GCP開発など情報発信していますので、よかったらフォローしてやってくださいmm
参考
Discussion
命名規則に関する記事ありがとうございます!
定数について認識が違っていたのでコメントさせて頂きました。
上記記事からの引用かと思いますがGoチュートリアルとEffectiveGoにはこのような記述が見当たらないように思えます。
また、現状のgoのrepositoryを見ても定数に関する明確なルールはないように思えます。
なので、定数の命名は比較的自由につけて良い印象でした。
もし、定数に関してGo公式の記述がありましたら引用元教えて頂ければ幸いです。
同じく、定数に関しては認識が異なりましたのでコメントを残させて頂きます。
例えばGoogleのスタイルガイドでは明確にMixedCapが推奨されています。