```go
package main
import "fmt"
//for range 经典bug 坑的解释
func main(){
a := []int{1,2,3,4}
//遍历切片
for k,v := range a{
fmt.Println(k,v)
fmt.Println(&k,"==",&v) //地址相同
}
//遍历切片
for k,v := range a{
kk,vv := k,v //new一个变量
fmt.Println(k,v)
fmt.Println(&kk,"==",&vv) //地址不同,达到要求
}
}
```
总结: 因为go的for range循环 里面 k,v都是公用的变量,所以地址都一样,要想不一样,就得再new一个变量并赋值,然后取地址
golang官方for range 文档: https://garbagecollected.org/2017/02/22/go-range-loop-internals/
理解有不妥之处还请见谅,欢迎指正,一起学习,哈哈
![image.png](https://static.studygolang.com/191119/8b3d0aca023a6f25ff3cc06511b8d5a8.png)
#2