有人可以解释为什么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]
答案 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)
}