Go のインターフェースとしてのインターフェース メソッドの戻り型
質問:
インターフェースの実装Golang でインターフェイス型を返すメソッドを使用すると、コンパイル エラーが発生する可能性があります。次のコードを考えてみましょう:
type IA interface { FB() IB } type IB interface { Bar() string } type A struct { b *B } func (a *A) FB() *B { return a.b } type B struct{} func (b *B) Bar() string { return "Bar!" }
このコードを実行すると次のエラーが発生します:
cannot use a (type *A) as type IA in function argument: *A does not implement IA (wrong type for FB method) have FB() *B want FB() IB
解決策:
この問題を解決するには、FB メソッドの戻り値の型は、IA インターフェイスで指定された型と一致する必要があります。したがって、次の変更が必要です。
func (a *A) FB() IB { return a.b }
この変更により、FB の戻り値の型が IA インターフェイスで定義されているように IB になるため、コードは正常にコンパイルされます。
追加の考慮事項:
IA インターフェイスと IB インターフェイスが別のパッケージで定義されている場合、パッケージのインポート ステートメントIB を含むファイルは、FB メソッドが実装されるファイルに含める必要があります。さらに、FB の戻り値の型は適切なパッケージ名で修飾する必要があります:
import ( "foo" // Package containing IB interface ) // Implementation in package bar func (a *A) FB() foo.IB { return a.b }
以上がGo インターフェイス メソッドの戻り値の型によってコンパイル エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。