← 語彙帳トップに戻る
🔵

Go(Golang)

シンプルで高速。インフラ・マイクロサービス向き

✅ 高速実行✅ 並行処理✅ シングルバイナリ ⚠ AIライブラリが少ない⚠ ジェネリクスが弱め
📌 一言で言うと

速い・シンプル・並行処理が得意。インフラの言語

Googleが開発。静的型付けコードを実行する前にデータの型を確認する仕組み。バグを事前に検出できるでコンパイルが速く、実行バイナリが1ファイルで完結するためデプロイが簡単。 ゴルーチンGoの軽量な並行処理の単位。OSスレッドより数千倍軽く、大量リクエストを効率よく処理できるによる並行処理が得意で、Docker・Kubernetes・Terraformなどインフラツールの大半がGoで書かれている。

🎯 得意な用途

高トラフィックAPIサーバー:毎秒数万〜数十万リクエストを捌く場面でPythonより大幅に有利。メモリ使用量も少ない。

インフラ・CLIツール:シングルバイナリで配布できるためサーバーへのデプロイやCLIツール配布が非常に簡単。

マイクロサービス:軽量で起動が速く、コンテナ(Docker)との相性が良い。gRPCとの組み合わせが定番。

有名事例:Docker・Kubernetes・Terraform・Grafana・Uber(APIゲートウェイ)・Dropbox(高性能部分)

⚖️ 他言語との比較
観点GoPythonRust
実行速度 速い 遅め 最速クラス
学習コスト 低め 低い 非常に高い
並行処理 ゴルーチンで容易 asyncio(やや難) 安全だが複雑
メモリ管理 GC(自動) GC(自動) 手動(安全)
向いている場面 高トラフィックAPI・インフラ AI・PoC 組み込み・OS
✅ 選ぶ理由 / ⚠ 選ばない理由

選ぶ理由

大量リクエストを捌くAPIに最適。シングルバイナリでデプロイが楽。Rustほど難しくなく、Pythonより速い「ちょうどいい」言語。

選ばない理由

AIアプリのPoCフェーズでは選ばない。Pythonライブラリ(PyTorch等)のエコシステムに勝てない。ジェネリクスが弱く抽象的な設計が難しい場面も。

💬 よくある会議での質問と答え方
Q.APIサーバー、PythonからGoに移行する必要ありますか?
A.現状のトラフィックが問題なければ不要です。ただしPythonのFastAPIで毎秒1万リクエスト超になってきたら、GoへのAPIゲートウェイ移行を検討するタイミングです
Q.GoとRustどちらを選びますか?
A.ほとんどのWebサービス・API用途ではGoで十分です。ゲームエンジン・組み込みデバイス・WebAssemblyが必要な場合にRustを選びます
🌐 エコシステム

パッケージマネージャ:go mod(標準)

主要フレームワーク

  • Gin — 軽量HTTP Webフレームワーク・API向け
  • Echo — 高性能HTTPフレームワーク・ミドルウェア豊富
  • chi — 軽量ルーター・標準ライブラリ重視
  • Fiber — Express風API・fasthttpベース・高速

主要ライブラリ

  • gRPC-Go — RPCフレームワーク・Protocol Buffers・マイクロサービス
  • gorm — ORM・マイグレーション・クエリビルダー
  • cobra — CLIフレームワーク・サブコマンド・フラグ
  • viper — 設定管理・複数形式(YAML/ENV/flag)

ランタイム

  • Go — 単一バイナリ・ランタイム不要・クロスコンパイル
💻 コード例

Hello World

package main
import "fmt"
func main() { fmt.Println("Hello") }

goroutine と channel

ch := make(chan int)
go func() { ch <- 42 }()
fmt.Println(<-ch)

context によるキャンセル伝播

ctx, cancel := context.WithCancel(context.Background())
defer cancel()
select { case <-ctx.Done(): return }
📚 学習ロードマップ

初級(目安: 〜2週間)

  • 基本文法・構造体・インターフェース — ポインタの理解・struct・interface の暗黙実装
  • go mod によるパッケージ管理 — go.mod / go.sum・モジュールミラーリング
  • エラーハンドリング — error 型・if err != nil・errors.Is/As

中級(目安: 〜1-2ヶ月)

  • goroutine と channel(並行処理) — CSPモデル・select・sync パッケージ・race detector
  • context パッケージ — キャンセル/タイムアウト伝播・value 受け渡し・実務必須
  • 標準ライブラリ — net/http・database/sql・encoding/json・testing

上級(目安: 〜3-6ヶ月)

  • ジェネリクス(Go 1.18+) — 型パラメータ・制約・型推論
  • パフォーマンス最適化 — pprof・ベンチマーク・アロケーション削減・sync.Pool
  • 分散システム — gRPC・サービスメッシュ・オブザーバビリティ