ホームページ  >  記事  >  バックエンド開発  >  Go でインターフェイスの戻り値の型を使用してインターフェイス メソッドを実装するにはどうすればよいですか?

Go でインターフェイスの戻り値の型を使用してインターフェイス メソッドを実装するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-09 15:12:02526ブラウズ

How to Implement Interface Methods with Interface Return Types in Go?

Go でのインターフェイス戻り型を使用したインターフェイス メソッドの実装

Go では、インターフェイス メソッドがそのインターフェイスとしてインターフェイスを持つ状況に遭遇することがあります。戻り値の型。このため、このようなメソッドをどのように実装するかという問題が生じます。

次のコード例を考えてみましょう。

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!"
}

このコードをコンパイルしようとすると、A 構造体の FB メソッドが返されるため、エラーが発生します。必要な IB インターフェイス タイプの代わりに *B 具象タイプを使用します。

この問題を解決するには、A 構造体の FB メソッドを変更して IB インターフェイス タイプを返すだけです。

func (a *A) FB() IB {
    return a.b
}

今、A 構造体は IA インターフェイスを正しく実装し、IA 型として使用できます。

インターフェイスが異なるパッケージで定義されている場合でも、メソッドを適切に実装することができます。たとえば、IA と IB がパッケージ foo で定義され、実装がパッケージ bar にある場合、宣言と実装は次のようになります。

宣言 (foo パッケージ内):

type IA interface {
    FB() IB
}

実装 (bar パッケージ内):

func (a *A) FB() foo.IB {
    return a.b
}

戻り値を必要なインターフェイスの型にキャストすることで、実装は必要なインターフェイスに準拠してコンパイルできます。成功しました。

以上がGo でインターフェイスの戻り値の型を使用してインターフェイス メソッドを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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