原石: Go 言語用の高度な依存関係注入パッケージ
鉱石ドキュメント Web サイト
GitHub リポジトリ
Go 言語はそのシンプルさとパフォーマンスの高さで知られていますが、開発者は依存関係の管理に関してしばしば課題に直面します。 Go 言語には他の言語のような組み込み DI フレームワークはありませんが、役立つサードパーティ ライブラリが多数あります。 Ore は、Go アプリケーションの依存関係注入 (DI) のための軽量で効率的なソリューションを提供するパッケージです。
Ore は、重大なパフォーマンスのオーバーヘッドを発生させることなく、DI 効率を簡素化し、向上させるように設計されています。他の多くの DI ライブラリとは異なり、Ore はリフレクションやコード生成の代わりに Go Generics を利用し、アプリケーションの高速性とタイプセーフを確保します。そのため、Ore は効率的で使いやすい DI ソリューションを探している開発者にとって理想的なものとなっています。 この記事では、Ore の主な機能と、それらの機能が Go での依存関係の管理にどのように役立つかを紹介します。また、Ore を実際のアプリケーションでどのように使用できるかを示すための基本的なコード例もいくつか示します。
を利用して依存関係を登録し、解決します。この設計の選択により、リフレクションとコード生成に通常伴うパフォーマンスのオーバーヘッドが回避されます。 Ore はジェネリックスを使用することで、実行時チェックを一切行わずに、依存関係の解決がタイプセーフかつ効率的に行われることを保証します。 このアプローチにより、他の多くの DI フレームワークでよくあるリフレクションとコード生成の落とし穴が回避されるため、Ore は高性能の DI ソリューションになります。
2.
簡単かつ柔軟な登録3.
キーイングサービスを使用して、同じインターフェースの複数の実装を登録および解決できます。この機能は、サービスの複数のバージョンを管理する必要がある場合、または特定の条件に基づいて異なる動作を実装する必要がある場合に役立ちます。 たとえば、さまざまな環境 (例: テスト、運用) またはさまざまな構成 (例: ユーザーの役割に基づく) 用にサービスの複数の実装を作成できます。
4.
プレースホルダーサービスもサポートしているため、実行時に設定できる未解決の依存関係を持つサービスを登録できます。この機能は、一部の値またはサービスが登録時には利用できなくても、後で利用できるようになる場合に便利です。 たとえば、構成値を必要とするサービスを登録し、コンテキスト (ユーザーの役割や環境など) に基づいて実際の構成を動的に提供できます。
Ore には、次のような一般的な問題を検出する組み込みの 登録検証 が含まれています。
さらに、パフォーマンス上の理由から検証を無効にしたり、すべてのサービスを登録した後にコンテナーをシールしてさらなる変更を防ぐこともできます。
6.
7.
モジュラーコンテナ をサポートしており、アプリケーションのさまざまな部分に個別のコンテナを定義できます。これは、異なるコンポーネントまたはモジュールが異なる依存関係を持つモジュール型アプリケーションに特に役立ちます。さまざまなユースケースに応じてスコープ付きコンテナーを定義できるため、依存関係の管理がより組織化され、保守が容易になります。
例 1: 基本的なサービスの登録と解決
<code class="language-go">package main import ( "context" "fmt" "github.com/firasdarwish/ore" ) // 定义一个接口 type Greeter interface { Greet() string } // 定义一个服务实现 type FriendlyGreeter struct{} func (g *FriendlyGreeter) Greet() string { return "Hello, world!" } func main() { // 使用默认Ore容器注册服务 ore.RegisterFunc[Greeter](ore.Singleton, func(ctx context.Context) (Greeter, context.Context) { return &FriendlyGreeter{}, ctx }) // 从默认Ore容器解析服务 greeter, _ := ore.Get[Greeter](context.Background()) fmt.Println(greeter.Greet()) // 输出:Hello, world! }</code>
例 2: 複数の実装で使用されるキー付きサービス
<code class="language-go">package main import ( "context" "fmt" "github.com/firasdarwish/ore" ) // 定义一个接口 type Greeter interface { Greet() string } // 定义多个实现 type FriendlyGreeter struct{} func (g *FriendlyGreeter) Greet() string { return "Hello, friend!" } type FormalGreeter struct{} func (g *FormalGreeter) Greet() string { return "Good day, Sir/Madam." } func main() { // 使用键注册多个实现 ore.RegisterKeyedFunc[Greeter](ore.Singleton, func(ctx context.Context) (Greeter, context.Context) { return &FriendlyGreeter{}, ctx }, "friendly") ore.RegisterKeyedFunc[Greeter](ore.Singleton, func(ctx context.Context) (Greeter, context.Context) { return &FormalGreeter{}, ctx }, "formal") // 根据键解析特定实现 greeter, _ := ore.GetKeyed[Greeter](context.Background(), "friendly") fmt.Println(greeter.Greet()) // 输出:Hello, friend! greeter, _ = ore.GetKeyed[Greeter](context.Background(), "formal") fmt.Println(greeter.Greet()) // 输出:Good day, Sir/Madam. }</code>
Go ジェネリックス を使用することで、Ore はリフレクションによるパフォーマンスのオーバーヘッドを発生させずに、高速 と タイプセーフ の依存関係解決を提供します。柔軟で使いやすく、アプリケーションの堅牢性を確保するための Keyed Services、Placeholder Services、Validation などの機能が含まれています。
鉱石ドキュメント Web サイトGitHub リポジトリ
以上がOre: Go 用の高度な依存性注入パッケージの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。