for range的使用注意事项

(一)

1.在range中修改切片:

go 复制代码
 1 n := []int{1,2,3,4,5,6}
 2 for i, e := range n{
 3         if i == len(n)-1 {
 4                 n[0] += e
 5         } else {
 6                 n[i+1] += e
 7         }
 8 
 9 }
10 fmt.Println("n:", n)

输出:

ini 复制代码
n: [22 3 6 10 15 21]

2.在range中修改数组:

go 复制代码
 1 n := [...]int{1,2,3,4,5,6}
 2 for i, e := range n{
 3         if i == len(n)-1 {
 4                 n[0] += e
 5         } else {
 6                 n[i+1] += e
 7         }
 8 
 9 }
10 fmt.Println("n:", n)

输出:

ini 复制代码
n: [7 3 5 7 9 11]

range表达式会在for语句开始执行时被求值一次。求值的结果值被传递出来,是值传递(复制)。由于切片是引用类型,所以可以跟随变化。

(二)

go 复制代码
func str() {
        a := "你好123"
        for i, v :=  range a {
                fmt.Println("i:",i, ", v:", v)
        }
        b := []rune(a)
        fmt.Println("b:", b)

}

输出:

yaml 复制代码
i: 0 , v: 20320
i: 3 , v: 22909
i: 6 , v: 49
i: 7 , v: 50
i: 8 , v: 51
b: [20320 22909 49 50 51]

【迁移】www.cnblogs.com/zxq89/p/166... posted @ 2022-09-05 15:42

相关推荐
我的div丢了肿么办9 小时前
go语言中管道 channel的使用
后端·go
海宇数科9 小时前
Go数据工程:利用海宇婚恋风险报告优化实名制严肃婚恋交友合规体验
人工智能·go
用户1257585243610 小时前
Golang Web后台管理框架推荐:Gin、GoFrame与数据面板项目怎么分
go
我的div丢了肿么办10 小时前
进程和线程以及go语言中的协程
后端·go
福兮说1 天前
Go time 包的九个坑:== 判断相等、Parse 差 8 小时、1 月 31 日加一个月变成 3 月 3 日
go
我的div丢了肿么办2 天前
go语言中的空接口和类型断言
后端·go
Thinker QAQ2 天前
并发编程(七):volatile——从语言规则到 CPU
java·python·go·并发编程·volatile·memory model
ZealSinger2 天前
Go1.25 FlightRecorder慢请求截trace
网络·数据库·go
福兮说2 天前
Go 迭代器的七个坑:break 后 panic、一次性迭代器、iter.Pull 不 stop,还有一个跑错地方的 defer
go
ThinkerQAQ_2 天前
并发编程(七):volatile——从语言规则到 CPU
java·python·go