2014-11-21 52 views
0

我有一些示例代码在这里(可运行在这里: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].Y10以及?

+3

很肯定'M [0] = z'进行复印 – 2014-11-21 00:36:54

+0

嗯,嗯...有没有办法让M [0]的地址呢? – Andrew 2014-11-21 00:58:03

+0

@Andrew:不,因为“地图的长度可以容纳存储在其中的项目的数量。” [地图类型](http://golang.org/ref/spec#Map_types) – peterSO 2014-11-21 01:07:10

回答

3

xzm[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) 
} 
+0

是的,这就是我最初想要的,并且已经这样做了。不管怎么说,还是要谢谢你! – Andrew 2014-11-21 02:11:07