问题
golang 执行for 遍历时取value的指针时容易出错
代码实现
package mainimport ( "log" "time")type student struct { Name string Age int}func main() { m := make([]*student, 3) stus := []student{ student{Name: "sa", Age: 10}, student{Name: "sb", Age: 11}, student{Name: "sc", Age: 12}, } log.Println("################ 错误做法 ##################") for k, stu := range stus { m[k] = &stu } for _, s := range m { log.Println(s.Name, s.Age) } log.Println("################ 正确做法 ##################") for k, _ := range stus { m[k] = &stus[k] } for _, s := range m { log.Println(s.Name, s.Age) } time.Sleep(2 * time.Second) }
输出如下
2018/12/12 12:24:19 ################ 错误做法 ################## 2018/12/12 12:24:19 sc 12 2018/12/12 12:24:19 sc 12 2018/12/12 12:24:19 sc 12 2018/12/12 12:24:19 ################ 正确做法 ################## 2018/12/12 12:24:19 sa 10 2018/12/12 12:24:19 sb 11 2018/12/12 12:24:19 sc 12
原因
for k, stu := range stus 变量stu 的地址并不会随着遍历而改变,所以&stu 对应的值始终为stus的最后的元素
作者:火头陀
链接:https://www.jianshu.com/p/dbd81a7c2bcb
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦