range是go中用于遍历集合的for循环语法,可遍历数组、切片、字符串、map和channel;它返回索引和元素副本,支持只取其一或两者都取,常用于简洁高效地迭代数据结构。

在golang中,range 是 for 循环的一种特殊形式,用于遍历数组、切片、字符串、map 和 channel。使用 range 遍历数组和切片非常常见,语法简洁且高效。
基本语法
range 返回两个值:索引和对应元素的副本。
你可以选择接收其中一个或两个值:
- i, v := range slice:i 是索引,v 是元素值
- _ , v := range slice:忽略索引,只获取值
- i := range slice:只获取索引
遍历切片示例
假设有一个字符串切片:
fruits := []string{"apple", "banana", "cherry"} for i, fruit := range fruits { fmt.Printf("索引 %d: %sn", i, fruit) }
输出:
索引 0: apple
索引 1: banana
索引 2: cherry
如果只关心值:
for _, fruit := range fruits { fmt.Println(fruit) }
如果只关心索引:
for i := range fruits { fmt.Println("位置:", i) }
遍历数组示例
数组的遍历方式与切片完全相同:
numbers := [3]int{10, 20, 30} for i, num := range numbers { fmt.Printf("第%d项是%dn", i, num) }
虽然 numbers 是数组,但 range 依然返回索引和值,用法一致。
注意事项
- range 遍历时,第二个返回值是元素的副本,修改它不会影响原数据
- 若想修改原切片元素,必须通过索引赋值:slice[i] = newValue
- 使用 _ 忽略不需要的变量,避免编译错误
- range 是值拷贝,遍历大结构体时可考虑使用指针切片提升性能
基本上就这些。range 简化了集合遍历,是 Go 中最常用的迭代方式之一。


