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 等の存在チェックを行う場合は
ok
id, 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
だったり他の命名にすることも
- 原則として慣習がある場合それに従い、慣習が無い場合いい感じの名前を考える
おすすめ書籍
リンク