我是 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 是一种很好的做法。访问地图键也是如此。
- 1 回答
- 0 关注
- 183 浏览
添加回答
举报
0/150
提交
取消