問題:
インターフェイスを提供し、依存する中央パッケージがあります。これらのインターフェイスの実装を提供する他のパッケージ。ただし、これらの依存パッケージを中央パッケージに含めると、Go では許可されない循環依存関係が作成されます。
標準ライブラリ ソリューション:
カスタム レジストリ ソリューション:
最適なソリューションの選択:
理想的なアプローチは特定の要件によって異なります:
カスタム レジストリ ソリューションのコード例:
// Package pi defines an interface I. package pi type I interface { // Some method. DoSomething() } // Package pa implements I with type A. package pa import "pi" type A struct{} func (a *A) DoSomething() { // Some implementation. } // Package pb implements I with type B. package pb import "pi" type B struct{} func (b *B) DoSomething() { // Some implementation. } // Package pf provides a factory to create instances of I. package pf import ( "pi" "pa" "pb" ) // NewClient returns an instance of I based on a flag. func NewClient(flag string) pi.I { switch flag { case "a": return &pa.A{} case "b": return &pb.B{} default: panic("Invalid flag") } }
以上が循環依存関係を作成せずに Go パッケージを登録するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。