ホームページ >バックエンド開発 >Golang >Golang でインターフェイスを返すインターフェイス メソッドを実装するにはどうすればよいですか?

Golang でインターフェイスを返すインターフェイス メソッドを実装するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-11 06:29:02378ブラウズ

How to Implement Interface Methods Returning Interfaces in Golang?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。