This question already has answers here:
Golang Reusing Memory Address Copying from slice?
(2个答案)
3年前关闭。
map [Allen:0xc42006a0c0 Tom:0xc42006a0c0]
艾伦&{Tom 23}
汤姆和{汤姆23}
在我看来,如何解释Slice的现象,stu应该是s的每个成员的地址,但是从结果来看,s具有相同的地址。
https://play.golang.org/p/0izo4gGPV7
(2个答案)
3年前关闭。
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)
}
}
结果:map [Allen:0xc42006a0c0 Tom:0xc42006a0c0]
艾伦&{Tom 23}
汤姆和{汤姆23}
在我看来,如何解释Slice的现象,stu应该是s的每个成员的地址,但是从结果来看,s具有相同的地址。
最佳答案
该应用程序使用本地变量stu
的地址。更改代码以获取slice元素的地址:
for i := range s {
m[s[i].Name] = &s[i]
}
https://play.golang.org/p/0izo4gGPV7
10-07 15:08