去:取地图会员的地址

时间:2014-03-20 18:02:33

标签: pointers map go

有人可以解释为什么r包含两个相同地址的条目吗?

r := make([]*Result, len(m))
i := 0
for _, res := range m {
    fmt.Println("index, result:", i, *&res)
    r[i] = &res
    i++
}
fmt.Println(r)

结果:

index, result: 0 {[] map[0:1 1:1] {port=6379}}
index, result: 1 {[] map[0:1 1:1] {port=6380}}
[0xc21010d6c0 0xc21010d6c0]

2 个答案:

答案 0 :(得分:1)

在循环的每次迭代中给出res的值。

您拥有相同地址的事实仅意味着内存中的点被重用。

答案 1 :(得分:1)

使用*Result作为地图值。例如,

package main

import "fmt"

type Result struct{}

func main() {
    m := make(map[string]*Result)
    r := make([]*Result, 0, len(m))
    for _, res := range m {
        fmt.Println("index, result:", len(r), *res)
        r = append(r, res)
    }
    fmt.Println(r)
}