Goのパッケージ名には複数形の名前はつけないほうがよいというメモ。
TL;DR
- 標準パッケージを参考に基本は単数形で命名する
- 特別な事情があるときだけ複数形の名前をつける
Goのネーミング
Goのパッケージ名や変数名の名前付けにはいくつかの指針がまとめられている。
Effective Goなどにもパッケージ名の節がある。
- https://golang.org/doc/effective_go.html#package-names
- https://github.com/golang/go/wiki/CodeReviewComments
- https://dave.cheney.net/2019/01/08/avoid-package-names-like-base-util-or-common
「短く簡潔なもの名前ほどよい」や「どのようにパッケージを分割するか」という指針はある。
しかし「そもそも複数形を使うべきか」のような説明はないような気がするので一筆書いてみる。
原則単数形でパッケージ名を決めるべき
たまにcontrollers
のようなパッケージ名を見たりするが、Goの場合は単数形のパッケージ名にするほうがよいと考える。
根拠となるような言及された情報があるわけではないが、標準パッケージは原則単数形のパッケージ名になっている。
stringsパッケージやerrorsパッケージは複数形では?
ご存知のとおり、標準パッケージにも例外的に複数形は存在する。 というかそこそこの数が存在していたりする。 以下のパッケージは多用されるので存在を知っている人も多いだろう。
- https://golang.org/pkg/strings/
- https://golang.org/pkg/bytes/
- https://golang.org/pkg/errors/
- https://golang.org/pkg/go/types/
これらは単純に予約語やプリミティブ型と同名になってしまうから複数形になっているだけだ。
なので、予約語や既定の名前に衝突しない限り単数形のパッケージ名をつければよい。
終わりに
とはいえ、Go本体のパッケージにもcmd/asm/internal/flags
のような複数形のパッケージはまれにある。