ホームページ  >  記事  >  バックエンド開発  >  Goで互換性はあるが異なるインターフェースのスライスを期待する関数に1つのインターフェースのスライスを渡す方法は?

Goで互換性はあるが異なるインターフェースのスライスを期待する関数に1つのインターフェースのスライスを渡す方法は?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-25 10:22:02220ブラウズ

How to Pass a Slice of One Interface to a Function Expecting a Slice of a Compatible but Different Interface in Go?

インターフェイス スライスを別の互換性のあるインターフェイス スライスに渡す

Go では、インターフェイス スライスを渡そうとすると問題が発生する場合があります。異なるが互換性のあるインターフェイスのスライスを期待する関数へのインターフェイス。単一の項目は正常に渡されますが、元のインターフェイスのスライスは失敗する可能性があります。

たとえば、A と B という 2 つのインターフェイスがあり、A には B が含まれており、B を満たす A の具体的な実装があるとします。 、この問題が発生する可能性があります。タイプ A の個々の項目を io.Reader を期待する関数に渡すことは機能しますが、A のスライスを []io.Reader を期待する関数に渡そうとすると失敗します。

これは、Go が静的であるためです。型付き言語であり、暗黙的な型変換は許可されません。この問題を解決するには、予期されるタイプの新しいスライスを作成し、元のスライスから要素を手動で割り当てる必要があります。この例では、エラー メッセージは []A を []io.Reader.

に直接割り当てることができないことを示唆しています。そのため、推奨される解決策は、[]io.Reader の新しいスライスを作成して要素をコピーすることです。 []A スライスから手動で。これにより、関数が期待どおりに正しいタイプのスライスを受け取ることが保証されます。

以上がGoで互換性はあるが異なるインターフェースのスライスを期待する関数に1つのインターフェースのスライスを渡す方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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