一、背景 今天看到组内项目中有这样一段代码 ,第一反应是局部变量 index 太奇怪了,当然也不能说这样写是错的,只是个人强迫症看着很难受...1 for _, index := range entities {2 key := index.TemplateId刚...

一、背景
今天看到组内项目中有这样一段代码 ,第一反应是局部变量 index 太奇怪了,当然也不能说这样写是错的,只是个人强迫症看着很难受...
1 for _, index := range entities { 2 key := index.TemplateId
刚好借此机会,梳理下 Go 的 for range 循环及相关知识点,做个小小总结。
二、知识点梳理
1,使用 Go 的 for range 进行循环时,range 关键字返回有两个变量,第一个是索引index,第二个是值 value,所以上述的代码我个人觉得 index 替换成 value 会更合适。
2,for range 进行循环时,真正循环的值是拷贝出来的副本值,这也意味着在 range 循环里面直接修改 v 值,实际是在修改 s 副本的值,所以是不会改变的,示例如下:
1 func RangeForSlice() { 2 s := []int{1, 2, 3} 3 fmt.Printf("修改前的s:%v \n", s) 4 for _, v := range s { 5 v++ 6 } 7 fmt.Printf("修改后的s:%v \n", s) 8 }
输出:
修改前的s:[1 2 3] 修改后的s:[1 2 3]
在日常项目中,确实会有需要改变原值的需求,那要怎么做呢?可以通过直接修改 s[i] 值的方式进行修改:
1 func RangeForSlice() { 2 s := []int{1, 2, 3} 3 fmt.Printf("修改前的s:%v \n", s) 4 for i := range s { 5 s[i]++ 6 } 7 fmt.Printf("修改后的s:%v \n", s) 8 }
输出:
修改前的s:[1 2 3] 修改后的s:[2 3 4]
织梦狗教程
本文标题为:【Golang】由 for range 循环引出的一些思考


基础教程推荐
猜你喜欢
- win10下使用virtualbox + vagrant配置ruby开发机环境 2023-07-23
- 浅析ELF转二进制允许把 Binary 文件加载到任意位置 2023-07-06
- ruby-on-rails-为使用Rails 4,nginx和乘客的用户设置自定义域 2023-09-21
- Swift初始化器与可选链的使用方法介绍 2023-07-08
- ruby on rails validates 2023-09-22
- R语言绘制折线图实例分析 2022-11-21
- Ruby3多线程并行Ractor使用方法详解 2023-07-23
- Swift中重写和重载的使用与对比总结 2023-07-05
- R语言 ggplot2改变柱状图的顺序操作 2022-11-17
- R语言-修改(替换)因子变量的元素操作 2022-11-26