解决映射分配中的运行时错误
开发人员在尝试创建映射时遇到运行时错误“分配给 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 { m["uid"][name] = T{cn: "Chaithra", street: "fkmp"} } fmt.Println(m) y, _ := yaml.Marshal(&m) fmt.Println(string(y)) }
错误源于内部映射“uid”这一事实,在为其条目赋值之前未初始化。要纠正此问题,可以将代码修改如下:
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)) m["uid"] = make(map[string]T) // Initialize the inner map here for _, name := range names { m["uid"][name] = T{cn: "Chaithra", street: "fkmp"} } fmt.Println(m) y, _ := yaml.Marshal(&m) fmt.Println(string(y)) }
通过初始化内部映射,我们确保它存在并且可以赋值,而不会引发运行时错误。此调整允许代码生成所需的映射结构并成功将其转换为 YAML。
以上是为什么我的 Go 代码在创建 YAML 映射时会产生'分配给 nil 映射中的条目”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!