go中遍历slice并获取各元素的地址,不能使用&value,原因如下:
在Go的for…range循环中,Go始终使用值拷贝的方式代替被遍历的元素本身,简单来说,就是for…range中那个value,是一个值拷贝,而不是元素本身。这样一来,当我们期望用&获取元素的地址时,实际上只是取到了value这个临时变量的地址,而非slice中真正被遍历到的某个元素的地址。而在整个for…range循环中,value这个临时变量会被重复使用,所以,在例子中,student_map第一次被填充了三个相同的地址,其实都是value的地址。而在最后一次循环中,value被赋值为{li,23}。因此,第一次student_map输出的时候显示出了三个&{li,23}
要正确获取元素的地址,可以使用索引,比如: &slice[i]