Pointers Go:获取地图成员的地址

Pointers Go:获取地图成员的地址,pointers,map,go,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 {[] ma

有人能解释为什么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]

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


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

使用
*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)
}

啊,这是有道理的,你有没有建议对所需的输出进行重写?所需的输出是什么?将map m(map[string]Result)的所有值转换为结果点的一部分。我认为map不能保证这些地址的有效性。所以有可能你买不到。如果你想给出地址,我想你必须提取这些值,你不能直接指向地图。所以我想我可以直接把它们放在中间数组中,然后在数组上循环,从那里取指针。。。讨厌的:-P