對Nil 映射中的項目進行賦值錯誤:建立映射切片
嘗試建立映射切片時,了解記憶體的運作方式非常重要在Go中是分配和存取的。嘗試將值指派給 nil 映射條目時,會發生執行階段錯誤「指派給 nil 對應中的條目」。
在提供的程式碼中,目標是建立一個映射切片,每個映射包含兩個索引:「ID」和「投資者」。最初的方法涉及製作映射數組:
invs := make([]map[string]string, length)
但是,這會導致恐慌錯誤,因為 invs 切片最初包含 nil 映射。要解決此問題,正確的聲明是:
a := make([]map[string]int, 100)
它使用空映射初始化切片的每個元素。
接下來,程式碼迭代映射並用資料填充它們:
for i := 0; i < length; i++ { invs[i] = make(map[string]string) invs[i]["Id"] = inv_ids[i] invs[i]["Investor"] = inv_names[i] }
此方法為切片中的每個條目建立映射。然而,填充地圖的更簡潔的方法是使用複合文字:
invs[i] = map[string]string{"Id": inv_ids[i], "Investor": inv_names[i]}
它創建一個已經填充的地圖。
對於更慣用的方法,請考慮使用結構來表示投資者:
type Investor struct { Id int Name string }
然後創建投資者的一部分:
a := make([]Investor, 100) for i := 0; i < 100; i++ { a[i] = Investor{Id: i, Name: "John" + strconv.Itoa(i)} }
這個方法提供了一種更乾淨、類型更安全的方式來表示投資者資料。
以上是在 Go 中建立映射切片時如何避免「指派給 nil 映射中的條目」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!