💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 循环语句range Golang range类似迭代器操作,返回 (索引, 值) 或 (键, 值)。 for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环。格式如下: ~~~ for key, value := range oldMap { newMap[key] = value } ~~~ *注意:range 会复制对象* ~~~ func main() { a := [3]int{0, 1, 2} for i, v := range a { // index、value 都是从复制品中取出。 if i == 0 { // 在修改前,我们先修改原数组。 a[1], a[2] = 999, 999 fmt.Println(a) // 确认修改有效,输出 [0, 999, 999]。 } a[i] = v + 100 // 使用复制品中取出的 value 修改原数组。 } fmt.Println(a) // 输出 [100, 101, 102]。 } 输出结果: [0 999 999] [100 101 102] ~~~ ### for vs. range区别 * for可以遍历array和slice;遍历key为整型递增的map;遍历string * for range可以完成所有for可以做的事情;还能做到for不能做的,包括遍历key为string类型的map并同时获取key和value;遍历channel; ***** 【总结】 * 遍历过程中可以视情况放弃接收index或value,可以一定程度上提升性能; * 遍历channel时,如果channel中没有数据,可能会阻塞; * 尽量避免遍历过程中修改原数据; * 使用index,value接收range返回值会发生一次数据拷贝;