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

konglong87 · · 340590 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

```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/ 理解有不妥之处还请见谅,欢迎指正,一起学习,哈哈

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

340590 次点击  
加入收藏 微博
8 回复  |  直到 2022-03-18 09:42:53
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传