Go言語のDependency Injection(依存性注入)ツールキット
Go 1.18+のジェネリクス機能を基盤とした型安全なAPIを提供するDIライブラリ。uber/digの代替として開発された
DIライブラリとしての特徴:
- ジェネリクスによる型安全性:
do.MustInvoke[*Engine](i)のように型パラメータを指定してサービスを取得。コンパイル時に型チェックが行われる - 柔軟なサービス登録:
do.Provide()、do.ProvideNamed()、do.ProvideValue()による個別登録、またはdo.Package()によるパッケージ単位の一括登録 - ローディング戦略: Eager、Lazy、Transientの3種類のローディング方式をサポート
- ライフサイクル管理: ヘルスチェック、グレースフルシャットダウン、依存関係を考慮した並列シャットダウン
- 循環依存検出: 依存関係の循環を自動検出
- デバッグ機能: Web UIとHTTPミドルウェアによる依存グラフの可視化
コード生成不要で軽量な設計