インターフェイスを返す Go インターフェイス メソッドが具体的な型を返すメソッドと一致しません
問題:
インターフェイスを返すインターフェイス メソッドは、インターフェイスを実装する具象型ではなく、実装型がインターフェイス自体を宣言している場合にのみ機能します。
質問:
どうすればよいですか?サードパーティの具象型への変更を回避しながらこの問題を解決しますか?
回答:
インターフェイスの不一致を調整するために、カプセル化手法を採用します。
1.ラッパー手法:
サードパーティの具象型をラップし、目的のインターフェイスを提供する新しい型を作成します:
<code class="go">type MyBar Bar func (b *MyBar) GetStringer() fmt.Stringer { return &Foo{"foo"} }</code>
このアプローチにより、インターフェイスに影響を与えることなく、目的のインターフェイスにカスタマイズできます。オリジナルコンクリートタイプ
2.埋め込み型テクニック:
サードパーティの具象型を新しい型に埋め込み、必要なインターフェイス実装を提供します:
<code class="go">type MyBar struct{ Bar } func (b *MyBar) GetStringer() fmt.Stringer { return b.Bar.GetStringer() }</code>
埋め込みにより、元の具象型の機能が保持されますが、
これらの手法により、元の具象型が準拠しない場合でも、指定されたインターフェイスに準拠するカスタム型を作成できます。これらは、サードパーティのタイプをより広範なインターフェイスベースのシステムに統合するための柔軟なアプローチを提供します。
以上が具象型でインターフェイス メソッドを実装するときにインターフェイスの不一致を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。