ホームページ  >  記事  >  バックエンド開発  >  Go のインターフェイス メソッドから具象型を返すにはどうすればよいですか?

Go のインターフェイス メソッドから具象型を返すにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-26 22:23:03805ブラウズ

 How Can I Return a Concrete Type from an Interface Method in Go?

インターフェイスと具象型を返すインターフェイス メソッド

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

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