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 コメント