我这里有一些示例代码(可在此运行: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
吗?
答案 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)
}