问答 / 0 / 1 / 创建于 5年前
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 } } // 以上代码有什么问题, 说明原因.
for _, v := range m { fmt.Println(v) } // &{王五 5} // &{王五 5} // &{王五 5}
Map 中的每个值都是指向局部变量 p 的指针。
p
你的本意应该是使用指向 slice 元素的指针:
for i := range ps { m[ps[i].Name] = &ps[i] }
我要举报该,理由是:
Map 中的每个值都是指向局部变量
p的指针。你的本意应该是使用指向 slice 元素的指针: