Go - map值不会更新

时间:2014-11-21 00:34:45

标签: go

我这里有一些示例代码(可在此运行:http://play.golang.org/p/86_EBg5_95

package main

import "fmt"

type X struct {
    Y   int
}

func main() {
    m := make(map[int]X)
    var x *X
    if _, ok := m[0]; !ok {
        z := X{}
        m[0] = z
        x = &z
    }

    x.Y = 10
    fmt.Println(m[0].Y)
    fmt.Println(x.Y)
}

基本上:我在这里错过了什么?我也不应该m[0].Y成为10吗?

1 个答案:

答案 0 :(得分:3)

x指向z,而m[0]z的副本(它是map[int]X而不是map[int]*X) ,因此更新x.Y不会更新m[0]

我不确定你想做什么,但这里m是一个包含指针的地图:

func main() {
    m := make(map[int]*X)
    var x *X
    if _, ok := m[0]; !ok {
        z := X{}
        m[0] = &z
        x = &z
    }

    x.Y = 10
    fmt.Println(m[0].Y)
    fmt.Println(x.Y)
}