地图分配中的运行时错误
问题:
尝试将地图转换为在 YAML 文件中,遇到错误,指出“运行时错误:分配给 nil 映射中的条目”。查看以下代码片段:
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) }
导致此错误的原因以及如何解决?
答案:
问题所在在外部映射内初始化内部映射。在提供的示例中,映射 m["uid"] 未初始化,导致在尝试为其分配名称时生成 nil 映射。
要初始化内部映射,请在 for 之前添加以下行循环:
m["uid"] = make(map[string]T)
这将创建内部映射并允许将名称分配给它,而不会遇到 nil 映射错误。
更正后的代码变为:
func main() { names := []string{"kasi", "remya", "nandan"} m := make(map[string]map[string]T, len(names)) m["uid"] = make(map[string]T) // Initialize the inner map for _, name := range names { m["uid"][name] = T{cn: "Chaithra", street: "fkmp"} } fmt.Println(m) y, _ := yaml.Marshal(&m) fmt.Println(string(y)) //fmt.Println(m, names) }
以上是为什么在 Go 中分配给映射会导致'运行时错误:分配给 nil 映射中的条目”以及如何修复?的详细内容。更多信息请关注PHP中文网其他相关文章!