インターフェイス値のスライスからの型アサーション
Go で、[] などのインターフェイス値のスライスから型アサートを試行します。ノードを []シンボルにすると、エラーが発生する可能性があります。 Symbol は Node インターフェイスを実装していますが、スライス []Node はインターフェイス型ではありません。
エラー メッセージ「無効な型アサーション: args.([]Symbol) (左側に非インターフェイス型 []Node)」が表示されます。 )」は、インターフェイス値のスライス ([]Node) をインターフェイス タイプに直接アサートできないことを示します([]Symbol).
Reason
スライスは、独自のメソッド セットを持つ別個の非インターフェイス型です。インターフェイスとは異なり、含まれる要素からメソッドを継承しません。したがって、インターフェイス値のスライスがインターフェイス自体であると仮定することは意味がありません。
解決策
この状況で Assert を適切に入力するには、次のようにします。ループを使用して、スライスの各要素を目的のタイプに変換します。たとえば、次のコード:
symbols := make([]Symbol, len(args)) for i, arg := range args { symbols[i] = arg.(Symbol) } fixed, rest := parseFormals(symbols)
Symbol 値、シンボルの新しいスライスを作成し、args スライスを反復処理して、各要素を Symbol 型に変換します。その後、シンボルを使用してさらなる処理を行うことができます。
型アサーションは、アサーションが成功することが確実な場合にのみ使用する必要があることに注意してください。そうしないと、実行時にパニックが発生する可能性があります。
以上がGo でインターフェイス値のスライスから Assert を安全に入力するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。