Go は『マイクロサービスのための言語』
Go は goroutine と channel による高並行性、シンプルな構文、高速ビルドでマイクロサービス構築の主要言語です。本記事では編集部の視点で、実務での使い方を公開情報をもとに整理します。マイクロサービス設計 もご参考に。
Go の強み
(1) goroutine:軽量並行処理。(2) channel:通信ベースの同期。(3) 静的型 + 高速ビルド。(4) 単一バイナリ:デプロイ容易。(5) 標準ライブラリ充実。
主要フレームワーク
(1) 標準 net/http:実用十分。(2) Gin:軽量Web フレームワーク。(3) Echo:機能豊富。(4) Fiber:Express 風。(5) Connect-Go:gRPC 互換。gRPC 実践 もご参考に。
並行処理パターン
(1) worker pool:並列実行。(2) fan-out/fan-in。(3) pipeline:チャネル連鎖。(4) context.Context:キャンセル/タイムアウト。(5) sync.WaitGroup:待機制御。
gRPC の実装
(1) proto 定義:API 契約。(2) protoc:コード生成。(3) interceptor:横断処理。(4) connect-go:gRPC + REST 互換。(5) HTTP/2 必須。gRPC vs REST もご参考に。
テストとモック
(1) testing パッケージ:標準。(2) testify:assert 豊富。(3) gomock:interface モック。(4) httptest:HTTP テスト。(5) table driven tests:定型パターン。TDD 実践 もご参考に。
本番運用
(1) pprof:プロファイリング標準。(2) OpenTelemetry:観測性。(3) structured logging:slog/zap/logrus。(4) graceful shutdown:context で。(5) Docker multi-stage:小さいイメージ。Observability 実践 もご参考に。
失敗しがちなパターン
(1) goroutine リーク:チャネル待ち永続化。(2) context 伝搬し忘れ。(3) defer の重コスト。(4) error handling 省略。(5) 過剰な並行。対策は、(1)context+cancel、(2)第一引数で必須、(3)プロファイル後判断、(4)errors.Is/As、(5)worker pool 制限、です。