我试图生成一个地图,然后将其转换为yaml文件,如下所示:
uid :
kasi:
cn: Chaithra
street: fkmp
nandan:
cn: Chaithra
street: fkmp
remya:
cn: Chaithra
street: fkmp
Run Code Online (Sandbox Code Playgroud)
我认为在创建地图时我遗漏了一些重要的东西.我的代码如下.
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)
}
Run Code Online (Sandbox Code Playgroud)
它给出以下错误:
panic: runtime error: assignment to entry in nil map
Run Code Online (Sandbox Code Playgroud)
Ama*_*wal 22
您定义的地图可能是使用变量
var m map[string]interface{}
而是使用
m := make(map[string]interface{})
以避免相应的错误
sha*_*rno 14
你应该检查地图是否为nil,如果在for循环中它是nil,则初始化一个:
if m["uid"] == nil {
m["uid"] = map[string]T{}
}
Run Code Online (Sandbox Code Playgroud)
有根据错误的东西
assignment to entry in nil map
Run Code Online (Sandbox Code Playgroud)
对于分配给深层键的嵌套映射,我们需要确定其外部键具有值。否则它会说地图为零。例如在你的情况下
m := make(map[string]map[string]T, len(names))
Run Code Online (Sandbox Code Playgroud)
m 是一个嵌套映射,其中包含string
具有map[string]T
as 值的键。你被赋值
m["uid"][name] = T{cn: "Chaithra", street: "fkmp"}
Run Code Online (Sandbox Code Playgroud)
在这里您可以看到m["uid"]
is nil
,我们声明它包含一个值[name]
,该值是 type 嵌套值的键T
。所以首先你需要为“uid”赋值或将它初始化为
m["uid"] = make(map[string]T)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
78913 次 |
最近记录: |