对 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中文网其他相关文章!