「改訂2版 みんなのGo言語」を読んだ
幾人かの著名な方々が、それぞれの章を執筆した形式の書籍となっている。
いわゆる入門書のような基礎文法の解説ではなく、現場でも使える or 使っているテクニックや環境構築などが解説されている。
A tour of Go を一通りやった後に読むとよい。
目次
第1章 Go によるチーム開発のはじめ方とコードを書く上での心得 (松木雅幸)
いくつか便利なコマンドラインツールを紹介していたので抜粋する。
コマンドラインツール
- Go の REPL 環境 gore
|
|
コードフォーマッター gofmt
Go には標準で gofmt
というフォーマッターが付いている。
これはインデントや改行位置、変数の整列などを自動調整してくれるツールである。
以下のようにして使う (実際は VSCode などに保存時に自動実行されるような設定をいれる)。
|
|
lint ツール
Go には標準で lint ツールが付いている。
go vet
はバグの原因になりそうなコードを検出する。golint
は Go らしくないコーディングスタイルに対して警告を出す。
リネームツール gorename
|
|
ソースコード解析ツール guru
|
|
Language Server Protocol
|
|
ディレクトリ名とパッケージ名
Go はディレクトリ単位でパッケージが切られる。
main を除き、ディレクトリ名はパッケージ名と同一であることが強く推奨される。
ファイル分割
Go は1つのパッケージディレクトリ階層内に複数のソースコードを配置できる。 同じ階層のコード内の package 宣言はすべて同じである必要がある。
ファイル分割は任意で構わないが type (型) を定義してそれに対するメソッド定義を1つのファイルに切り出すなどするとよい。
パッケージ分割
クラス定義の階層と名前空間が対応しているプログラミング言語は多いが、Go はその感覚でパッケージ分割してはいけない。
パッケージの中で利用されるコンポーネントの類は type を定義して type ごとにファイルを分けるのが良い。
単独のライブラリとしてほかのプロジェクトから使えるかどうかがパッケージを分割する基準になる。 たとえばロガーパッケージをサブパッケージとして分割するなど。 またサブパッケージのインポートには絶対パスを使う。
e.g. import "my.example.com/path/to/myproj/logger"
第2章 マルチプラットフォームで動作する社内ツールのつくり方Windows (mattn)
マルチプラットフォームで動作させるコツなど。
パスの違いを吸収する
Windows と UNIX のパスの違いを吸収するために path/filepath
を使う。
積極的にdeferを使う
回収すべきリソースがあり、かつ後処理を実行すべき順番が決まっている場合。
|
|
このような場合、ファイルストリームを閉じてからディレクトリを消さなければいけない。
Go では defer
を使用すると呼び出したスコープを抜ける際に、呼び出された順番とは逆の順番で実行される。
シングルバイナリにこだわる
シングルバイナリのメリットはデプロイの簡略化にある。
Web アプリのようにテンプレートファイルや画像などを設置することでデプロイの手間が増えてしまわないようにアセットツールを有効活用する。
有名なアセットツール
statik
packr
go.rice
第3章 実用的なアプリケーションを作るために (藤原俊一郎)
実用的なアプリケーションを作るためのテクニックなど。
効率的なI/O処理
入出力では bufio
でバッファリングを行う。
人間が扱いやすい形式の数値
go-humanize
を使う。
|
|
第4章 コマンドラインツールを作る (中島大一)
コマンドラインツールを作る際のテクニックなど。
ディレクトリ構成
バイナリをメインとするか、ライブラリをメインとするかでオススメの構成が変わる。
- バイナリをメインとする場合のディレクトリ構成
|
|
- ライブラリをメインとする場合のディレクトリ構成
|
|
サブコマンドを持ったCLIツール
本書内ではサードパッケージについて、いくつか紹介していた。
個人的には spf13/cobra
がいいと思う。
第5章 The Dark Arts Of Reflection (牧 大輔)
reflect
パッケージに関するテクニックなど。
第6章 Goのテストに関するツールセット (鈴木健太)
test
やベンチマークに関するテクニックなど。
第7章 データベースの扱い方 (mattn)
Go でデータベース扱う方法についての解説がされていた。ORM の紹介などもある。
フレームワーク echo
の紹介などもある。
技術評論社 (2019/8/1)
売り上げランキング: 5,929
Author
LastMod 2019-12-12