Go はシンプルさと並行性を重視した言語。goroutine/channel による並行プログラミング、Web 開発、CLI ツール開発、テスト戦略まで、Go の実践的な全てを解説する。
Goはシンプルさ・並行性・高速コンパイルを柱に設計された、Google発の静的型付けコンパイル言語である。
Goは静的型付けと構造的部分型を採用し、struct・interface・type assertionで柔軟かつ安全なデータモデリングを実現する。
Goはerror interfaceを中心とした明示的なエラーハンドリングを採用し、errors.Is/As・sentinel errors・wrappingで堅牢なエラー伝搬を実現する。
Goはgo.modベースのモジュールシステムでパッケージを管理し、import・internal・バージョニングで堅牢な依存関係を実現する。
goroutineは軽量スレッド、channelは型安全な通信路であり、CSPモデルに基づくGoの並行処理の中核を成す。
syncパッケージはMutex・RWMutex・Once・Poolなどの同期プリミティブを提供し、sync/atomicはロックフリーのアトミック操作を実現する。
Goの並行パターンはgoroutineとchannelを組み合わせ、Fan-out/Fan-in・Pipeline・Worker Pool・Contextにより実用的な並行処理を構築する。
context.Contextはgoroutine間でキャンセルシグナル・タイムアウト・リクエストスコープの値を伝搬するための標準メカニズムである。
net/httpはGoの標準ライブラリでHTTPサーバー/クライアントを実装し、Handler・ServeMux・ミドルウェアパターンで本番品質のWebサービスを構築できる。
GinとEchoはGoで最も人気のあるWebフレームワークであり、高速ルーティング・ミドルウェア・バリデーション・Swagger連携を提供する。
Goはdatabase/sqlで標準的なDB接続を提供し、sqlx・GORMで生産性を向上させ、マイグレーション・接続プールで本番運用を支える。
gRPCはProtocol Buffersベースの高性能RPCフレームワークであり、型安全なサービス定義・双方向ストリーミング・gRPC-Gatewayで柔軟なAPI設計を実現する。
table-driven tests、testify、httptestを駆使してGoコードの品質を保証する実践的テスト手法
cobra、flag、promptuiを活用して本格的なコマンドラインツールをGoで構築する
Go 1.18で導入された型パラメータと制約を使い、型安全で再利用可能なコードを書く
pprof、traceを使ってGoアプリケーションのボトルネックを特定し、パフォーマンスを最適化する
Docker、クロスコンパイルを駆使してGoアプリケーションを効率的にビルド・デプロイする
Effective Goの精神に基づき、保守性・可読性・性能を兼ね備えたGoコードを書くための指針