【发布时间】:2018-02-20 12:01:38
【问题描述】:
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)
}
}
结果:
地图[艾伦:0xc42006a0c0 汤姆:0xc42006a0c0]
艾伦和{汤姆 23}
汤姆和{汤姆 23}
如何解释 Slice 的现象,在我看来,stu 应该是 s 的每个成员的地址,但是从结果来看,s 的地址是一样的。
【问题讨论】:
-
stu 是一个循环变量,并且只存在一次:该变量(== 内存地址)在循环的所有迭代中都被重用。