我是golang的新手,我正在尝试创建map [string] interface {}类型的地图。
但是当我尝试创建一个没有它的新密钥时,我得到一个运行时错误"恐慌:分配到nil map"中的条目。谁能告诉我,我做错了什么?
去PlayGround:https://play.golang.org/p/vIEE0T11yl
这是我的代码:
ViewModels
答案 0 :(得分:8)
您需要初始化地图本身: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是一种很好的做法。访问地图密钥同样如此。