先来看一段代码
type ak struct {
num int
name string
}
func main() {
da := make(map[int]*ak)
data := []ak{{num: 1, name: "aa"}, {num: 2, name: "bb"}, {num: 3, name: "cc"}}
for _, v := range data {
da[v.num] = &v
}
for i, v := range da {
log.Println(i, ":", v)
}
}
他的输出结果是
![](https://img.haomeiwen.com/i9834648/b20913e8bd2d0626.png)
是不是感觉很奇怪,为什么会变成一致的呢。
将上述代码的指针使用去除
type ak struct {
num int
name string
}
func main() {
da := make(map[int]ak)
data := []ak{{num: 1, name: "aa"}, {num: 2, name: "bb"}, {num: 3, name: "cc"}}
for _, v := range data {
da[v.num] = v
}
for i, v := range da {
log.Println(i, ":", v)
}
}
结果正常
![](https://img.haomeiwen.com/i9834648/7dc85fd044707d46.png)
原因:因为for中的V,他是一个固定的地址,所以不能直接进行获取地址的赋值,同理,也不能直接使用v接受一个值用来更改。
网友评论