func TestMapValuePointer2(t *testing.T) {
fmt.Println("Test Map Value Pointer 2")
m := map[string]int{"rsc": 3711, "r": 2138, "gri": 1908, "adg": 912}
n := len(m)
array := make([]*int, n)
i := 0
for _, v := range m {
array[i] = &v
fmt.Printf("Add to array: %d\n", v)
i++
}
for _, k := range array {
fmt.Printf("Value: %d\n", *k)
}
}
输出是不是:行为切片
Value: 912 Value: 3711 Value: 2138 Value: 1908
相反,输出也许像:
Value: 912 Value: 912 Value: 912 Value: 912
有人能解释为什么结果是一样的以上?
您不断添加相同的指针'v'到切片。另请参见https://golang.org/doc/faq#closures_and_goroutines – JimB
如果您需要指针,则需要将映射的值设置为像“* int”这样的指针类型。地图项目可以在内存中移动,因此您无法直接在地图中获取指针。 [这是一个稍微扩展的版本。](http://stackoverflow.com/a/32751792/2714852) – twotwotwo