为什么在 Go 中将元素分配给 nil 映射会发生混乱,但解组到同一个映射中却不会?

问题描述 投票:0回答:1

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>
dictionary go initialization panic
1个回答
0
投票

Go 中的地图需要先初始化才能使用。当你声明 var m map[string]int 时,map 默认为 nil。

使用 m := make(map[string]int)

© www.soinside.com 2019 - 2024. All rights reserved.