ホームページ > バックエンド開発 > Golang > Go でインターフェイス値のスライスを正しく入力するにはどうすればよいですか?

Go でインターフェイス値のスライスを正しく入力するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-16 06:38:15
オリジナル
793 人が閲覧しました

How Can I Correctly Type Assert a Slice of Interface Values in Go?

インターフェイス値のスライスを型アサートする

プログラミングでは、インターフェイス値のスライスを型アサートする必要がある状況に遭遇することがよくあります。ただし、これによりエラーが発生する場合があります。インターフェイス値のスライスのアサートが常に実行可能であるとは限らない理由を詳しく見てみましょう。

インターフェイス値のスライスから []Symbol などの特定の型にアサートしようとすると、[]Node提供された例のように:

args.([]Symbol)
ログイン後にコピー

次のエラーが発生する可能性があります:

invalid type assertion: args.([]Symbol) (non-interface type []Node on left)
ログイン後にコピー

Thisこのエラーは、[]Node などのスライスが Node 自体とは異なりインターフェイス タイプではないために発生します。スライスは、独自の動作とメソッドのセットを持つ独自の型を持ちます。したがって、基になる型を動的に変更できるインターフェイスの流動性と適応性が欠けています。

インターフェイス値のスライスをインターフェイスとして扱うのは便利に見えるかもしれませんが、それは根本的に型付けの概念に違反します。 。上の例では、スライス引数をシンボル値のスライスに変換することが目的です。ただし、args は Node 値のスライスであるため、単純な型アサーションは実行できません。

この状況を正しく処理するには、別のアプローチを利用できます。

symbols := make([]Symbol, len(args))
for i, arg := range args { symbols[i] = arg.(Symbol) }
ログイン後にコピー

このコードはSymbol 値、シンボルの新しいスライス。args スライスを反復処理し、型アサーションを使用して各要素を Symbol に変換します。この手動変換により、結果のスライス内の各要素が目的の型に準拠することが保証され、無効な型アサーションを必要とせずに目的の機能が提供されます。

以上がGo でインターフェイス値のスライスを正しく入力するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート