Go では、インターフェイスを戻り値の型として実装しようとするとエラーが発生する可能性があります。戻り値の型はインターフェイスでもあります。この質問では、この問題を詳しく調べ、エラーを解決する解決策を提供します。
提供されたコードは、インターフェイス IB を返すことが期待されるメソッド FB() を使用したインターフェイス IA を示しています。ただし、構造体 A の FB の実装は、IB ではなく具象型 *B を返します。
このエラーを修正するには、構造体 A の FB の戻り値の型を *B ではなく IB に変更するだけです:
func (a *A) FB() IB { return a.b }
この変更により、A が IA インターフェイスを正しく実装し、エラーが解決されることが保証されます。
この質問では、個別のパッケージでのインターフェイスの定義についても質問されています。このアプローチは Go で実現可能であり、異なるパッケージ間でインターフェイスを共有できます。ただし、実装が別のパッケージにある場合は、実装で完全修飾インターフェイス名を使用する必要があります。
たとえば、IA と IB がパッケージ foo で定義され、実装がパッケージ bar にある場合、パッケージ bar の宣言は次のようになります:
type IA interface { FB() foo.IB }
一方、bar の実装は次のようになります:
func (a *A) FB() foo.IB { return a.b }
この調整により、FB の戻り値の型が、インターフェースが定義されているパッケージに関係なく、IA インターフェース。
以上がGoで戻り値の型としてインターフェイスを使用してインターフェイスを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。