为了账号安全,请及时绑定邮箱和手机立即绑定

golang 接口映射 - 恐慌:分配给 nil 映射中的条目

golang 接口映射 - 恐慌:分配给 nil 映射中的条目

Go
偶然的你 2021-11-08 16:04:38
我是 golang 的新手,我正在尝试创建类型为 map[string]interface{} 的地图。但是当我尝试创建一个不存在的新键时,我收到一个运行时错误“panic: assignment to entry in nil map”。谁能告诉我我做错了什么?去游乐场:https : //play.golang.org/p/vIEE0T11yl这是我的代码:package mainfunc main() {    buffer := Buffer{}    buffer.AddRecord("myKey", 12345)}type Buffer struct {    records    map[string][]interface{}}// ProcessRecord adds a message to the buffer.func (buffer *Buffer) AddRecord(key string, record interface{}) {    _, ok := buffer.records[key]    if !ok {        buffer.records[key] = make([]interface{}, 0)    }    buffer.records[key] = append(buffer.records[key], record)}
查看完整描述

1 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

您需要初始化地图本身:https : //play.golang.org/p/wl4mmGjmRP


func (buffer *Buffer) AddRecord(key string, record interface{}) {

    // Check for nil, else initialise the map

    if buffer.records == nil {

        buffer.records = make(map[string][]interface{})

    }

    _, ok := buffer.records[key]

    if !ok {

        buffer.records[key] = make([]interface{}, 0)

    }


    buffer.records[key] = append(buffer.records[key], record)

}

您还可以为您的结构类型使用构造函数 - 例如NewBuffer(...) *Buffer- 也可以初始化该字段,但在使用它之前检查 nil 是一种很好的做法。访问地图键也是如此。


查看完整回答
反对 回复 2021-11-08
  • 1 回答
  • 0 关注
  • 183 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信