码迷,mamicode.com
首页 > 其他好文 > 详细

【Golang】由 for range 循环引出的一些思考

时间:2021-04-13 12:32:49      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:code   key   int   循环   ++   index   怎么   span   不能   

 

一、背景

 

今天看到组内项目中有这样一段代码 ,第一反应是局部变量 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 循环引出的一些思考

标签:code   key   int   循环   ++   index   怎么   span   不能   

原文地址:https://www.cnblogs.com/Lily-nercel/p/14651111.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!