Go 中的for range组合可以和方便的实现对一个数组或切片进行遍历,但是在某些情况下使用for range时很可能就会被"坑",下面用一段代码来模拟下:代码解析:。因为for range在遍历值类型时,其中的v变量是一个值的拷贝,当使用&获取指针时,实际上是获取到v这个临时变量的指针,而v变量在for range中只会创建一次,之后循环中会被一直重复使用,所以在arr2赋值的时候其实都是v变量的指针,而&v最终会指向arr1最后一个元素的值拷贝。来看看下面这个代码,用for i来模拟for range,这样更易于理解:传递原始指针使用临时变量使用闭包官方提示由于这一问题过于普遍,Golang甚至将其写入了文档的『常见错误』部分:

详解Go语言中for range的"坑"

详解Go语言中for range的"坑"

详解Go语言中for range的"坑"