首页 > 后端开发 > Golang > 在 Go 中创建映射切片时如何避免'分配给 nil 映射中的条目”错误?

在 Go 中创建映射切片时如何避免'分配给 nil 映射中的条目”错误?

Patricia Arquette
发布: 2024-11-05 16:23:02
原创
628 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板