【Go】mapの変数宣言と初期化に関して / 他の型との異なる挙動?

mapの変数宣言と初期化に関してです。

以下の該当コードですが、2行目でアドレスを出力をするとアドレスが帰ってきます。

3行目でm3["orange"] = 150が出来ないのは、var m3 map[string]intのように変数宣言はしているもののメモリ上に確保をしていないからということで学んだのですが違うのでしょうか?

思ったのは変数宣言はメモリに変数の場所は確保されるけどstringとかと違ってmapだけは少し違うということなんですかね。

該当コード

var m3 map[string]int // 変数宣言はしているもののメモリ上に確保をしていない fmt.Printf("address: %p\n", &m3) // address: 0x140000ac020 なぜアドレスが出力されるのでしょうか m3["orange"] = 150 // 代入するmapがないので不可 fmt.Println(m3) // panic: assignment to entry in nil map

正解例

m2 := make(map[string]int) // 初期化(メモリ上に空のmapを作る) fmt.Printf("address: %p\n", &m2) // address: 0x14000122018 OK! m2["apple"] = 100 // 代入可能 fmt.Println(m2) // map["apple"]100

宜しくお願いいたします。

コメントを投稿

0 コメント