インターフェイスと具象型を返すインターフェイス メソッド
Go では、インターフェイスを返すインターフェイス メソッドにより、型の実装に柔軟性が提供されます。ただし、このようなメソッドを具象型で実装しようとすると、エラーが発生する可能性があります。
次の例を考えてみましょう。
<code class="go">func GetStringer() fmt.Stringer</code>
ここで、GetStringer は fmt.Stringer インターフェイスを返すインターフェイス メソッドです。
Foo などの具象型がそれ自体の値 (*Foo) を返すように実装されている場合、エラーが発生します。これは、Foo が fmt.Stringer を直接実装していないためです。
この問題を解決するには、次のようないくつかのアプローチを取ることができます。
アダプター タイプを使用する
具象型をラップし、必要なインターフェイスに準拠するアダプター型を作成します。
<code class="go">type MyBar struct{ Bar } func (b *MyBar) GetStringer() fmt.Stringer { return b.Bar.GetStringer() }</code>
このアプローチでは、元の型 Bar を変更せずに拡張できます。
Wrapping with theインターフェイス
または、具象型を必要なインターフェイスで直接ラップすることもできます。
<code class="go">func (b *Bar) GetStringer() fmt.Stringer { return &Foo{"foo"} }</code>
ここで、具象型 Bar は、インスタンスを返す GetStringer メソッドの実装を提供します。 fmt.Stringer.
を実装する Foo 型の両方のメソッドは、Go の具象型でのインターフェイス メソッドの戻り値に対応するためのオプションを提供します。適切なアプローチは、コードの特定の要件とアーキテクチャによって異なります。
以上がGo でインターフェイス メソッドから具象型を返すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。