Nil インターフェースとポインター変換の物語
Golang で nil インターフェースを特定のデータ型のポインターに直接変換しようとする提供されたコード スニペットに示されているように、エラーが発生します。このエラーは、nil インターフェイス変数が異なる動的型の値を保持できるか、値をまったく保持できないために発生します。
型アサーション n = p.(*Node) は、インターフェイス変数 p に非-nil タイプ *Node の値。ただし、p は nil であるため、特定のデータ型にキャストできません。
別のアプローチは、次の構文を使用して特定のデータ型のポインター変数に明示的に nil を割り当てることです。 n = (*Node )(なし)。この代入により、ポインタ n が *Node 型のゼロ値 (nil) を指すように設定されます。
nil インターフェイス値をより効果的に処理するには、型アサーションの「カンマ OK」形式の使用を検討してください。 n、ok := p.(*ノード);わかりました { ... }。この形式は 2 つの値を返します。n は型アサーションが成功した場合のインターフェイスの値であり、ok は型アサーションが成功したかどうかを示します。インターフェース値が nil の場合、ok は false になり、n はターゲット型のゼロ値になります。
以上がGo で Nil インターフェイスからポインタへの直接変換が失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。