当前位置: 首页 > news >正文

go for 循环变量的使用及易错点

1,for 循环变量,整个for循环中变量i始终使用一个变量,i地址不变,存放的内容在变

func main() {for i := 0; i < 10; i++ {fmt.Printf("值:%v  地址:%v \n", i, &i)}
}

打印:

值:0  地址:0xc00001e068 
值:1  地址:0xc00001e068 
值:2  地址:0xc00001e068 
值:3  地址:0xc00001e068 
值:4  地址:0xc00001e068 
值:5  地址:0xc00001e068 
值:6  地址:0xc00001e068 
值:7  地址:0xc00001e068 
值:8  地址:0xc00001e068 
值:9  地址:0xc00001e068

若是使用变量地址,注意变量的内容一直在变化。如下例子,&i最后指向内容3

	var test_i [](*int)for i := 0; i < 3; i++ {test_i = append(test_i, &i)}for i := 0; i < 3; i++ {fmt.Println(*test_i[i])}

打印

3
3
3

2,for 循环加goroutine的使用,注意goroutine中使用循环变量,会随着for 循环的循环次数变化而变化。

var wg sync.WaitGroupfor i := 0; i < 3; i++ {wg.Add(1)go func() {defer wg.Done()fmt.Println("goroutine 中使用循环变量:", i) // 打印的是循环结束后的 i 值}()}wg.Wait()

 相当于for循环结束才真正运行goroutine。此时i最后的值是3.

gorountine 中使用循环变量: 3
gorountine 中使用循环变量: 3
gorountine 中使用循环变量: 3

想要得到不同变量的使用,可以让循环变量作为参数传递进去

var wg sync.WaitGroupfor i := 0; i < 3; i++ {wg.Add(1)go func(t int) {defer wg.Done()fmt.Println("gorountine 中使用循环变量:", t) // 打印的是循环结束后的 i 值}(i)}wg.Wait()

gorountine 中使用循环变量: 0
gorountine 中使用循环变量: 2
gorountine 中使用循环变量: 1


http://www.mrgr.cn/news/975.html

相关文章:

  • 奥威BI数据可视化展示:如何充分发挥数据价值
  • win/mac专业图像处理软件 PS 软件下载安装
  • 【Oracle点滴积累】解决ORA-20000: ORA-12899: value too large for column错误的方法
  • 8月19号的学习
  • 后端开发刷题 | 主持人调度【贪心算法】
  • 雅思小作文写作技巧
  • 九大服务架构性能优化方式
  • 解密!抖音百万粉丝博主三维地图视频都用到了什么GIS数据和技术
  • MySQL中处理JSON数据:大数据分析的新方向
  • Docker安全与资源
  • 打卡学习Python爬虫第三天|python的re模块的使用
  • xss.function靶场(easy)
  • css实现水滴效果图
  • 电磁手术导航系统市场报告:未来几年年复合增长率CAGR为6.1%
  • 力扣面试经典算法150题:轮转数组
  • 如何保证Redis缓存和数据库的数据一致性
  • 简易双端视频通信实现
  • 16.FreeRTOS内存管理
  • 基于SpringBoot的论坛系统设计与实现(源码+lw+部署文档+讲解等)
  • 正则表达式入门:Python ‘ re ‘ 模块详解