首页 > 后端开发 > Golang > 为什么我在 Go 中收到'运行时错误:分配给 Nil Map 中的条目”?

为什么我在 Go 中收到'运行时错误:分配给 Nil Map 中的条目”?

Barbara Streisand
发布: 2024-12-06 16:47:18
原创
189 人浏览过

Why Am I Getting a

理解“运行时错误:分配给 Nil Map 中的条目”

当尝试使用 Go 内置的 Map 数据结构时,您可能会遇到以下问题:遇到可怕的“运行时错误:分配给 nil 映射中的条目”。此错误源于尝试将值分配给 nil(或未初始化)映射中不存在的键。

在您的特定情况下,您尝试从映射生成一个 YAML 文件,其中每个key 代表一个“uid”,每个值都是一个包含个人信息的映射。但是,您的代码遇到运行时错误。

解决方案:初始化内部映射

出现问题是因为您的内部映射(“uid”)在您之前没有初始化尝试为其键分配值(例如“kasi”、“remya”和“nandan”)。要解决此问题,只需在 for 循环之前添加以下行:

m["uid"] = make(map[string]T)
登录后复制

此行初始化内部映射并将其与外部映射 (m) 中的键“uid”相关联。现在,您可以安全地将值分配给内部映射中的键:

m["uid"][name] = T{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))
    m["uid"] = make(map[string]T)
    for _, name := range names {

        m["uid"][name] = T{cn: "Chaithra", street: "fkmp"}

    }
    fmt.Println(m)

    y, _ := yaml.Marshal(&m)

    fmt.Println(string(y))
}
登录后复制

通过此修改,您将不再遇到“运行时错误:分配给 nil 映射中的条目”。您的代码将成功生成具有所需结构的 YAML 文件。

以上是为什么我在 Go 中收到'运行时错误:分配给 Nil Map 中的条目”?的详细内容。更多信息请关注PHP中文网其他相关文章!

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