Pointers Go:获取地图成员的地址
有人能解释为什么r包含同一地址的两个实体吗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 := 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