Go言語はGoogleが開発・公開しているプログラミング言語の 1 つです。
コード記述の簡潔さ・理解しやすさと、プログラム実行速度やリソース効率の両立を目指しています。
この記事ではGoの命名規則をご紹介します。リーダブルコードを目指しましょう。
Go 言語の入門内容については以下の記事を参照してください。
パッケージ名、ディレクトリ名
- 完結に、全て小文字かつ 1 単語で
- 例外としては
_testサフィックス
- 例外としては
- utility パッケージにしない
- base、util、common、lib、misc など
- パッケージ名を繰り返さない
repository.UserRepositoryとか NGlist.NewListでなくlist.New
- どうしても難しい場合、ディレクトリ名はケバブケースは可
xxx-xxx
ファイル名
- スネークケースで
xxx_xxx
関数、type、構造体
- キャメルケースで
- 公開する場合はアッパーキャメルケース
XxxYyy - 公開しない場合はローワーキャメルケース
xxxYyy
- 公開する場合はアッパーキャメルケース
- Getter/Setter
- Go では所謂 Getter には
Getプレフィックスを付けません- 例えば
Userを返したいなら、メソッド名はGetUserではなくUser
- 例えば
- Setter の場合は SetUser のように
Setを付けましょう- (Go で Setter を作るケースはあまりありませんが)
- Go では所謂 Getter には
レシーバ名
Go には class は無いが、 型に対してメソッドを定義 できます。
構造体だけにメソッド定義できるのではなく、型に対して定義できることに注意しましょう。
Go ではメソッドを定義する型を レシーバ と呼びます。
- 英語 1 文字か 2 文字でなるべく短く命名
- 型が
Clientであればc、cl等
- 型が
- レシーバ名は必ず統一
- 場所によって
cが使われていたりclが使われていたりは NG
- 場所によって
- 修飾語を利用しない
- 例えば
httpClientならレシーバ名はc、DBCreatorならc
- 例えば
- map 等の存在チェックを行う場合は
okid, ok := users[userID]
- 命名は基本的にキャメルケースだが、元々略語として浸透している単語は一貫した大文字と小文字を使用
urlではなくURLとか、httpではなくHTTPを使うとかACL、API、ASCII、CPU、CSS、DNS、EOF、GUID、HTML、HTTP、HTTPS、ID、IP、JSON、LHS、QPS、RAM、RHS、RPC、SLA、SMTP、SQL、SSH、TCP、TLS、TTL、UDP、UI、UID、UUID、URI、URL、UTF8、VM、XML、XMPP、XSRF、XSS
変数・引数名
- 基本的にレシーバ名と同じ
- ただし、スコープに応じて使い分けましょう
Configの変数なら、c、conf、cfgなどで使い分けましょう
error変数名
- 基本的に
err - 公開する際など複数定義が必要な場合は
Errプレフィックスを付けて宣言
インターフェース名
- メソッドが 1 つの場合
- 原則として「メソッド名 +
er/or」- 例えば
Writeメソッドを持つインターフェースであればWriter
- 例えば
- 目的語がある場合は「目的語 + 動詞 +
er/or」- 例えば
PrintObjectメソッドを持つインターフェースであればObjectPrinter
- 例えば
- 原則として「メソッド名 +
- メソッドが 2 つ以上の場合
- 原則として慣習がある場合それに従い、慣習が無い場合いい感じの名前を考える
ioパッケージのReadCloserのように、メソッドを連ねて前述のerを付けるパターンCodecのように、特別なメソッドの組み合わせのときに使われるパターンCodecはEncodeDecoderだったり他の命名にすることも
- 原則として慣習がある場合それに従い、慣習が無い場合いい感じの名前を考える
おすすめ書籍
リンク
