新しい値を Nil スライスに追加できますが、新しい値を Nil マップに追加すると実行時エラーがスローされます。その理由を見てみましょう
var slice []int // nil slice slice = append(slice, 1) // append works as expected fmt.Println(slice) // [1] var m map[string]int // nil map m["one"] = 1 // ? Runtime panic: assignment to entry in nil map
Nil スライスへの追加が機能する理由:
スライスは、基礎となる配列および動的にサイズ変更されるデータ構造への参照です。 3 つのコンポーネントで構成されています
nil スライスを宣言すると、長さと容量はゼロになり、基になる配列を指しません。基本的に、追加操作は容量をチェックし、十分でない場合は、新しい要素を格納するのに十分な容量を持つ新しい基になる配列を割り当て、新しく作成された配列を指す新しいスライスを返します。したがって、追加は期待どおりに機能します。
Nil マップへの追加が機能しない理由:
golang のマップは基本的にハッシュ テーブルとして機能し、キーと値のペアを保存するには、まず内部データ構造を初期化する必要があります。
マップを nil (var m map[string]int) として宣言すると、マップは初期化されておらず、キーと値のペアを格納する準備がまだ整っていません。したがって、nil マップに値を追加しようとすると、実行時エラーが発生します。このようなエラーを回避するには、make
を使用してマップを作成します。
var m map[string]int // nil map m = make(map[string]int) // initialize it m["one"] = 1 // map is now initialized, so we can add values print(m) // map[one:1]
コード例とともにそのようなトピックについて詳しく知りたい場合は、私の Github リポジトリを自由にチェックしてください:
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3