如何解释golang切片范围的现象

Sot*_*liu -3 range go slice

type student struct {
    Name string
    Age  int
}

func main() {
    m := make(map[string]*student)
    s := []student{
        {Name: "Allen", Age: 24},
        {Name: "Tom", Age: 23},
    }

    for _, stu := range s {
        m[stu.Name] = &stu
    }
    fmt.Println(m)
    for key, value := range m {
        fmt.Println(key, value)
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:

地图[艾伦:0xc42006a0c0 汤姆:0xc42006a0c0]

艾伦和{汤姆 23}

汤姆 &{汤姆 23}

如何解释Slice的现象,在我看来,stu应该是s的每个成员的地址,但是从结果来看,s的地址是相同的。

Cer*_*món 5

应用程序正在获取局部变量的地址stu。更改代码以获取切片元素的地址:

for i := range s {
    m[s[i].Name] = &s[i]
}
Run Code Online (Sandbox Code Playgroud)

https://play.golang.org/p/0izo4gGPV7