go面试题:为什么v.name都是博客?

type student struct {
    name string
    age  int
}

func main() {
    m := make(map[string]*student)
    stus := []student{
        {name: "pprof.cn", age: 18},
        {name: "测试", age: 23},
        {name: "博客", age: 28},
    }

    for _, stu := range stus {
        m[stu.name] = &stu
    }
    for k, v := range m {
        fmt.Println(k, "=>", v.name)
    }
}
回复
阅读 986
3 个回答
✓ 已被采纳

https://draveness.me/golang/d...
__

for range 的 k,v 是固定的内存地址,只是循环的时候不断给它赋值,如果使用 &stu 那就是指向同一块内存地址。所以就会在最后一次赋值完成后,都是博客

for _, stu := range stus {
    m[stu.name] = &stu
}

这里啊,stu会被复用,每次都是同一块内存地址,&stu会变成最后一个的值,一变m所有都变了。

新手上路,请多包涵
for _, stu := range stus {
    stu := stu
    m[stu.name] = &stu
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏