猿问

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

我是 golang 的新手,我正在尝试创建类型为 map[string]interface{} 的地图。


但是当我尝试创建一个不存在的新键时,我收到一个运行时错误“panic: assignment to entry in nil map”。谁能告诉我我做错了什么?


去游乐场:https : //play.golang.org/p/vIEE0T11yl


这是我的代码:


package main


func 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)

}


偶然的你
浏览 184回答 1
1回答

慕村9548890

您需要初始化地图本身:https : //play.golang.org/p/wl4mmGjmRPfunc (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 是一种很好的做法。访问地图键也是如此。
随时随地看视频慕课网APP

相关分类

Go
我要回答