为了账号安全,请及时绑定邮箱和手机立即绑定

golang 遍历时元素指针问题

标签:
Go

问题

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 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消