首页 > 后端开发 > Golang > 为什么我的 Go 代码在创建 YAML 映射时会产生'分配给 nil 映射中的条目”错误?

为什么我的 Go 代码在创建 YAML 映射时会产生'分配给 nil 映射中的条目”错误?

Mary-Kate Olsen
发布: 2024-12-05 19:10:11
原创
214 人浏览过

Why Does My Go Code Produce a

解决映射分配中的运行时错误

开发人员在尝试创建映射时遇到运行时错误“分配给 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板