我是 golang 的新手,我正在嘗試創(chuàng)建類型為 map[string]interface{} 的地圖。但是當我嘗試創(chuàng)建一個不存在的新鍵時,我收到一個運行時錯誤“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條經(jīng)驗 獲得超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)
}
您還可以為您的結構類型使用構造函數(shù) - 例如NewBuffer(...) *Buffer- 也可以初始化該字段,但在使用它之前檢查 nil 是一種很好的做法。訪問地圖鍵也是如此。
- 1 回答
- 0 關注
- 214 瀏覽
添加回答
舉報
0/150
提交
取消