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