记录一下自己对go里面for range的bug 坑 理解,第一次在这个大社区发布

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/

理解有不妥之处还请见谅,欢迎指正,一起学习,哈哈


这是一个从 https://studygolang.com/topics/10269 下的原始话题分离的讨论话题