zoukankan      html  css  js  c++  java
  • golang 执行for 遍历时取value的指针时容易出错

    package main
    
    import (
        "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的最后的元素
  • 相关阅读:
    adb monkey测试 命令
    大数据 入门
    代码设计模式 编写思想 架构
    汉化 android studio
    电脑时间显示秒 win10电脑显示农历
    Restful api介绍
    Map工具系列-03-代码生成BySQl工具使用说明
    win10 office2013激活工具
    win10 1607 密匙
    .net社区
  • 原文地址:https://www.cnblogs.com/forgo/p/13418114.html
Copyright © 2011-2022 走看看