プログラミングには様々なお作法や暗黙的なルール、パターンがあります。
プログラムの命名規則やフォーマットなどについてのお作法やルールをまとめたものがコーディング規約になります。
このルールを知らないと他人に正しくコードを読んでもらえなかったり、チーム内で自分だけ違う書き方をしてしまうということになります。
コーディング規約は基本的に組織やチーム毎に内容を決めて作成しますが、多くの場合は元にしているものがあります。
そこで本記事では、Goでよく使われる一般的なコーディング規約についてまとめます。
ある程度一人でプログラミングができるようになった方や、組織やチームにまだコーディング規約がない方は、参考にしていただければと思います。
Goのコーディング規約
Goのコーディング規約のまとめとして、以下の内容を採り上げます。
- コーディング規約の種類
- 命名に関する規約
- フォーマットやレイアウトに関する規約
- コメントに関する規約
コーディング規約の種類
Goのコーディング規約は、代表的なものとして以下があげられます。
本記事では、公式で紹介されている『Effective Go』の内容をまとめます。
命名に関する規約
命名 | 規則 | 例 |
---|---|---|
パッケージ名
|
小文字の単一単語名とする。
短く、簡潔にする。
ソースディレクトリのベース名にする。
|
bytes
ソースが src/encoding/base64 であれば base64 とする
|
公開メソッド名
公開フィールド名
|
パスカルケース(アッパーキャメルケース)とする。
|
MyMethod
|
非公開メソッド名
非公開フィールド名
|
キャメルケースとする。
|
myMethod
|
コンストラクタ名
|
生成する構造体名の先頭にNewを付ける
|
NewExample
|
1つのメソッドを持つインターフェイス名
|
メソッドの名前にerを付ける。
|
Reader
|
フォーマットやレイアウトに関する規約
go fmtの利用
Go言語では、フォーマットを機械的に行うためのgofmtプログラムを提供しています。
実行することで、標準スタイルのインデントにして、縦方向にも整列します。
元のソースコードをフォーマットして書き換えるには、go fmtコマンド(goコマンドのfmtオプション)を利用します。
元のソースコードを書き換えずに、標準出力へ整形結果を出力したい場合は、gofmtコマンドを利用します。
インデント
インデントには、基本的にタブを用います。スペースは、どうしても使わなければならない時に使います。
一行の桁数
行の長さに制限はありません。長すぎると感じる場合は、改行し、一つタブを付けてインデントします。
括弧
制御構文(if、for、switch)に括弧は必要ありません。
演算子の優先順位に従ってスペースを付けることで、括弧は必要ありません。
x<<8 + y<<16
コメントに関する規約
コメントには、ブロックスタイルのコメント /* */ と、行コメント // があります。
通常は行コメントを使います。
ブロックコメントは、パッケージコメントに使います。
パッケージコメント
パッケージ文の前にはパッケージコメントを記述します。
ファイルが複数であるパッケージでは、どれか1つのファイルにパッケージコメントを書きます。
パッケージコメントとして記述すると、godocページの最初に出力されます。
godocが空白を調整するため、整列させる必要はありません。長い行には改行を入れてください。
ドキュメントコメント
パッケージ中のトップレベル宣言の直前のコメントがドキュメントコメントになります。
公開される関数、変数にはドキュメントを書きます。
ドキュメントコメントは文章で、1文で内容を表す要約を記載します。
ツールを使って自動的にチェックできるようにしよう
コーディング規約は、多くの場合、プロジェクトや組織ごとに異なります。
それらをすべて覚えてプログラミングするのは、返って効率が悪くなる場合があるので、主要な部分は覚えて、細かい部分はツールでチェックできるようにすると良いです。
IDEにツールが備わっている場合もありますし、それぞれのコーディング規約に沿ったチェックツールが提供されている場合もあります。
それらを上手く活用し、自分たち向けにカスタマイズして、誰もが同じ規約のもとで、同じようにコードが書けるようにするのがベターです。
Goのコーディング規約というわけではありませんが、コーディング時に気を付けるべき様々な点がまとめられた書籍『リーダブルコード』もおすすめです。
当ブログでも以前に紹介していますので、気になる方はぜひチェックしてみてください。
今回はGoのコーディング規約について紹介しました。
参考になれば幸いです。
コメント