Service Container) ✦ コンストラクタ注入を標準ルートとして使える(自動で依存解決される) ✦ エコシステム全体(ライブラリ/サンプル/拡張)がコンテナ前提になりやすい ✦ 生成タイミングのデフォルト Laravel:解決(resolve)された時に生成 (基本は遅延。 singletonは初回resolve時に作って保持) Spring:singleton Beanは起動時生成がデフォルト (必要なら @Lazy で遅延可) ※ 実際の生成タイミングは設定 /スコープで変わる。ここでは「デフォルトの傾向」として整理 Go ✦ DIコンテナは標準的な前提ではない ✦ 標準ライブラリ + 必要なライブラリを組み合わせる文化 ✦ main などで手書き DI(明示的な組み立て)が基本 でも、本当にGoでDIコンテナが必要?(タイトル回収) → Redditでも議論されていた(必要ないかもという意見が多そう) Ref: What DI container do you use and why? : r/golang
Containers and the Dependency Injection pattern martinfowler.com/articles/injection.html • 同上 kakutani訳 kakutani.com/trans/fowler/injection.html • Microsoft — Dependency injection in ASP.NET Core learn.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection Goにおける DI • s-ota — GoのDIを理解する qiita.com/s-ota/items/584be39c7611c0d48b0c • cpp0302 — GoでDI(依存性注入)についてまとめ qiita.com/cpp0302/items/3c5254b840df6af24c10 • hanenao — GoのDIコンテナライブラリの比較 zenn.dev/hanenao/articles/eec5a5b3a28c9d • castingone_dev — GoでDIコンテナは必要か? zenn.dev/castingone_dev/articles/0b765ec8901d40 • hinom77 — GoのDIコンテナについて qiita.com/hinom77/items/1d7a30ba5444454a21a8 Reddit • r/golang — What DI container do you use and why? reddit.com/r/golang/comments/18qhc1t/ ライブラリ / ツール • awesome-go — Curated list of Go frameworks, libraries and software github.com/avelino/awesome-go • NVIDIA/gontainer — A DI container for Go github.com/NVIDIA/gontainer 発表資料 • mazrean — KessokuのDIにおけるgoroutineスケジューリング (Go Connect #6) speakerdeck.com/mazrean/go-connect-6 引用・参考資料