プログラミングでは、インターフェイス値のスライスを型アサートする必要がある状況に遭遇することがよくあります。ただし、これによりエラーが発生する場合があります。インターフェイス値のスライスのアサートが常に実行可能であるとは限らない理由を詳しく見てみましょう。
インターフェイス値のスライスから []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 サイトの他の関連記事を参照してください。