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

Linda Hamilton
リリース: 2024-11-11 06:29:02
オリジナル
299 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート