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
解決策:
問題は、A 構造体の FB メソッドの戻り値の型にあります。 IA インターフェイスは FB が IB を返すことを期待していますが、実装では *B を返しています。これを修正するには、FB の IB への戻り値の型を次のように変更します。
func (a *A) FB() IB { return a.b }
パッケージ間でのインターフェイスの共有:
異なるパッケージでインターフェイスを定義することが可能です。そしてそれらを共有してください。このような場合、インターフェイスを構造体に実装するときは、メソッドの戻り値の型に完全なパッケージ パスを使用する必要があります。たとえば、IA と IB が foo というパッケージで定義され、実装が bar というパッケージにある場合、宣言は次のようになります:
type IA interface { FB() foo.IB }
実装は次のようになります:
func (a *A) FB() foo.IB { return a.b }
以上がGolang でインターフェイスを返すインターフェイス メソッドを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。