質問:
Go では、構造体が 1 つにありますインターフェースを実装するパッケージ。別の依存パッケージで、テスト目的でこの構造体の偽の実装を作成したいと考えています。しかし、インターフェイスを実装する構造体を返す関数をそのインターフェイスの変数に割り当てようとすると、Go はタイプ セーフについて不平を言います。
Architecture:
// Package expensive type myStruct struct{} func (m *myStruct) DoSomething() {...} func (m *myStruct) DoSomethingElse() {...} func CreateInstance() *myStruct {...} // Expensive to call // Package main type myInterface interface { DoSomething() } type structToConstruct struct { factoryFunction func() myInterface } func (s *structToConstruct) performAction() {...}
エラー:
「高価な.CreateInstance (タイプfunc() *expensive.myStruct) as type func() myInterface in field value"
回答:
CreateInstance 関数が *myStruct 値を返すために問題が発生します。これは、factoryFunction で必要な func() myInterface タイプとは異なります。これを解決するには:
// Package main type myInterface interface { DoSomething() } type myStruct struct{} func (m *myStruct) DoSomething() {...} func getInstance() myInterface { return &myStruct{} }
この変更により、getInstance は myInterface タイプを返すようになり、それを FactoryFunction に割り当てることができるようになります。
追加メモ:
wrapper := func() myInterface { return expensive.CreateInstance() }
以上がGoでインターフェイスを実装する構造体を返す関数を割り当てる方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。