FAQ 100

package faq100

type People struct {
    Name string
    Age  int
}

func Parse() {
    m := make(map[string]*People)
    ps := []People{
        {Name: "张三", Age: 3},
        {Name: "李四", Age: 4},
        {Name: "王五", Age: 5},
    }
    for _, p := range ps {
        m[p.Name] = &p
    }
}

// 以上代码有什么问题, 说明原因.
go
觉得还不错点个赞呗!
taadis
讨论数量: 1
for _, v := range m {
    fmt.Println(v)
}
// &{王五 5}
// &{王五 5}
// &{王五 5}

Map 中的每个值都是指向局部变量 p 的指针。

你的本意应该是使用指向 slice 元素的指针:

for i := range ps {
      m[ps[i].Name] = &ps[i]
}
3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!