首頁 > 後端開發 > Golang > 在 Go 中建立映射切片時如何避免「指派給 nil 映射中的條目」錯誤?

在 Go 中建立映射切片時如何避免「指派給 nil 映射中的條目」錯誤?

Patricia Arquette
發布: 2024-11-05 16:23:02
原創
626 人瀏覽過

How to Avoid the

對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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板