【发布时间】:2017-04-05 11:16:23
【问题描述】:
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)
}
}
输出不是:
价值:912 价值:3711 价值:2138 价值:1908相反,输出可能是:
价值:912 价值:912 价值:912 价值:912有人能解释一下为什么结果会像上面那样吗?
【问题讨论】:
-
您不断将指向
v的相同指针添加到切片中。另见golang.org/doc/faq#closures_and_goroutines -
如果您需要指针,您需要将地图的值设为指针类型,例如
*int。地图项可以在内存中移动,因此您无法直接将指针指向地图。 Here's a slightly expanded version of that.
标签: pointers dictionary go slice