以下代码有什么问题,说明原因
package main
import (
"fmt"
)
type student struct {
Name string
Age int
}
func main() {
//定义map
m := make(map[string]*student)
//定义student数组
stus := []student{
{Name: "zhou", Age: 24},
{Name: "li", Age: 23},
{Name: "wang", Age: 22},
}
//将数组依次添加到map中
for _, stu := range stus {
m[stu.Name] = &stu
}
//打印map
for k,v := range m {
fmt.Println(k ,"=>", v.Name)
}
}
注意此类问题在Go版本在1.22 版本后将会有变化
Go >=1.22
zhou => zhou
li => li
wang => wang
Go < 1.22
zhou => wang
li => wang
wang => wang
Go1.22版本前
//将数组依次添加到map中
for _, stu := range stus {
m[stu.Name] = &stu
}
这里stu的地址是相同的,因此每次循环m[stu.Name] 存储的值都是相同的。