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

我正在尝试生成地图,然后将其转换为 yaml 文件,如下所示:


uid :

      kasi:

        cn: Chaithra

        street: fkmp

      nandan:

        cn: Chaithra

        street: fkmp

      remya:

        cn: Chaithra

        street: fkmp

我想我在创建地图时遗漏了一些重要的东西。我的代码如下。


package main


import (

    "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


交互式爱情
浏览 173回答 3
3回答

catspeake

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

温温酱

您应该检查地图是否为 nil,如果在 for 循环中为 nil,则对其进行初始化:if m["uid"] == nil {    m["uid"] = map[string]T{}}

呼啦一阵风

有根据错误的东西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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go