type student struct {
Name string
Age int
}
func pase_student() map[string]*student {
m := make(map[string]*student)
stus := []student{
{Name: "zhou", Age: 24},
{Name: "li", Age: 23},
{Name: "wang", Age: 22},
}
for _, stu := range stus {
m[stu.Name] = &stud
}
return m
}
func main() {
students := pase_student()
for k, v := range students {
fmt.Printf("key=%s,value=%v,ponter=%v \n", k, v,&v)
}
}
打印结果:
key=zhou,value=&{wang 22},ponter=0xc000082020
key=li,value=&{wang 22},ponter=0xc000082020
key=wang,value=&{wang 22},ponter=0xc000082020
正确的写法应该如下:
for i , _ := range stus {
stu := stus[i]
m[stu.Name] = &stud
}
或者干脆就这么写:自己琢磨的
for i:=0;i<len(stus);i++{
stud := stu
m[stu.Name] = &stud
}
一开始不明白 后来经过查资料了解到 for range 过程中的k,v 公用不能直接做引用传递
for _, stu := range stus {
stud := stu
fmt.Println("stu:",stud)
m[stu.Name] = &stud
}