こんにちは、m3 エンジニアリンググループ CTO 矢崎(id:Saiya)です。
過去に Go 言語の仕様を一通り見た経験があったのですが、久しぶりに Go のコードを最近読み書きした際に、ここ数年の Go 言語やエコシステムの進化による変化もあり、発見やハマりが多々ありました。
同じような迷い・回り道をしてしまう方ももしかしたらおられるのではないかと思いますゆえ、 エムスリー Advent Calendar 2020 6 日目の記事として、筆者が実際に「最初から知っていれば時間を無駄にしなかったのに...!」と感じた知見をざっくばらんにシェアいたします。
本記事がどなたかの一助になりますと幸いです。 なお本記事の内容は筆者個人の理解・自身で直接読み書きしたユースケースの範囲での知見であり、全ての Go 利用事例に当てはまらない点も含みうります。
- エラー処理まとめ (go >= 1.13, 2019 年 9 月リリース)
- エラーへのスタックトレースの付与とエラーの一意性
- 標準型で引っかかりやすいポイント
- 並列処理の goroutine のエラー集約には golang.org/x/sync/errgroup が便利
- 複数ある型変換の構文の区別
- goroutine は preemptive multitask (go >= 1.14)
- Context の扱い
- テストコードを書く際にモレがちな点
- アサーションライブラリ
- テストコードにおけるエラーのチェック
- private メンバのテスト
- テスト実行とカバレッジ採取
- Meta Linter のススメ
- go.mod の不要な記述の自動検知
- ビルド時の工夫
- CREDITS の生成
- CI 用のツールの go.mod での扱い
- (VS Code などの gopls LSP 利用時) サブディレクトリに go.mod がある構成への対応
- We are hiring!