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

Susan Sarandon
リリース: 2024-11-14 17:46:02
オリジナル
971 人が閲覧しました

How to Implement an Interface with an Interface as Return Type in Go?

Go で戻り値の型としてインターフェイスを使用してインターフェイスを実装するという障害を克服する

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

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