我正在尝试生成地图,然后将其转换为 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 回答
温温酱
TA贡献1752条经验 获得超4个赞
您应该检查地图是否为 nil,如果在 for 循环中为 nil,则对其进行初始化:
if m["uid"] == nil {
m["uid"] = map[string]T{}
}
呼啦一阵风
TA贡献1802条经验 获得超6个赞
有根据错误的东西
assignment to entry in nil map
对于分配给深层键的嵌套映射,我们需要确定其外部键具有值。否则它会说地图为零。例如在你的情况下
m := make(map[string]map[string]T, len(names))
m 是一个嵌套映射,其中包含string
具有map[string]T
as 值的键。你被赋值
m["uid"][name] = T{cn: "Chaithra", street: "fkmp"}
在这里您可以看到m["uid"]
is nil
,我们声明它包含一个值[name]
,该值是 type 嵌套值的键T
。所以首先你需要为“uid”赋值或将它初始化为
m["uid"] = make(map[string]T)
- 3 回答
- 0 关注
- 172 浏览
添加回答
举报
0/150
提交
取消