Unmarshal 会在后台初始化地图吗?
var m map[string]int
// m["hello"] = 1
// Output: panic: assignment to entry in nil map
err := json.Unmarshal([]byte(`{"hello": 1}`), &m)
if err != nil {
panic(err)
}
fmt.Println(m)
// Output: map[hello:1]
例如,结构体的工作方式不同。
type helloStruct struct {
Hello int `json:"hello"`
}
var h *helloStruct
err = json.Unmarshal([]byte(`{"hello": 1}`), h)
fmt.Println(err)
// Output: json: Unmarshal(nil *main.Hello)
fmt.Println(h)
// Output: <nil>
Go 中的地图需要先初始化才能使用。当你声明 var m map[string]int 时,map 默认为 nil。
使用 m := make(map[string]int)