为了账号安全,请及时绑定邮箱和手机立即绑定

运行时错误:分配给 nil 映射中的条目

运行时错误:分配给 nil 映射中的条目

Go
交互式爱情 2021-09-09 15:14:19
我正在尝试生成地图,然后将其转换为 yaml 文件,如下所示:uid :      kasi:        cn: Chaithra        street: fkmp      nandan:        cn: Chaithra        street: fkmp      remya:        cn: Chaithra        street: fkmp我想我在创建地图时遗漏了一些重要的东西。我的代码如下。package mainimport (    "fmt"    "gopkg.in/yaml.v2")type T struct {    cn     string    street string}func main() {    names := []string{"kasi", "remya", "nandan"}    m := make(map[string]map[string]T, len(names))    for _, name := range names {        //t := T{cn: "Chaithra", street: "fkmp"}        m["uid"][name] = T{cn: "Chaithra", street: "fkmp"}    }    fmt.Println(m)    y, _ := yaml.Marshal(&m)    fmt.Println(string(y))    //fmt.Println(m, names)}它给出了以下错误:panic: runtime error: assignment to entry in nil map
查看完整描述

3 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

您尚未初始化您的内部地图。在 for 循环之前,您可以添加m["uid"] = make(map[string]T)然后分配名称。


查看完整回答
反对 回复 2021-09-09
?
温温酱

TA贡献1752条经验 获得超4个赞

您应该检查地图是否为 nil,如果在 for 循环中为 nil,则对其进行初始化:


if m["uid"] == nil {

    m["uid"] = map[string]T{}

}


查看完整回答
反对 回复 2021-09-09
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

有根据错误的东西

assignment to entry in nil map

对于分配给深层键的嵌套映射,我们需要确定其外部键具有值。否则它会说地图为零。例如在你的情况下

m := make(map[string]map[string]T, len(names))

m 是一个嵌套映射,其中包含string具有map[string]Tas 值的键。你被赋值

m["uid"][name] = T{cn: "Chaithra", street: "fkmp"}

在这里您可以看到m["uid"]is nil,我们声明它包含一个值[name],该值是 type 嵌套值的键T。所以首先你需要为“uid”赋值或将它初始化为

m["uid"] = make(map[string]T)


查看完整回答
反对 回复 2021-09-09
  • 3 回答
  • 0 关注
  • 172 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信