arr1:=[]int{1,2,3}
arr2=make([]*int)
for _,v:=range arr1{
arr2=append(arr2,&v)}
for _,v:=range arr2{
fmt.Println(*v)}
执行以上代码,你会发现输出的全是3,本来我们预想的应该是1,2,3
为什么呢?
因为golang的range为了节省空间,每次v都是用了同样的地址,所以每次所取到的&v都是相同的,也就成了最后的3了
再比如下面这个例子
func main() { for i := 0; i < 10; i++ { fmt.Println(&i) } }
执行后发现输出了10个相同的地址