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

Go でインターフェイス値のスライスから Assert を安全に入力するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-22 06:14:14
オリジナル
902 人が閲覧しました

How to Safely Type Assert from a Slice of Interface Values in Go?

インターフェイス値のスライスからの型アサーション

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

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