Go语言range语句的用法
在Go语言中,每一个 for 语句都可以使用一个特殊的 range 子语句,其作用类似于迭代器,用于轮询数组或者切片值中的每一个元素,也可以用于轮询字符串的每一个字符,以及字典值中的每个键值对,甚至还可以持续读取一个通道类型值中的元素。
range 关键字的右边是 range 表达式,表达式一般写在 for 语句的前面,以便提高代码的易读性。
range 关键字的左边表示的是一对“索引-值”对,根据不同的表达式,返回不同的结果,range 右边表达式返回的类型如表1所示。
range 右边表达式返回的类型,除了轮询字符串外,还包括数组、切片、字典及通道等,例如:
第0次,x的值为1.
第1次,x的值为2.
第2次,x的值为3.
第3次,x的值为4.
第4次,x的值为0.
在以上代码中,定义了 numbers 的长度为5,但 numbers 中只有 4 个值,因此最后一个为空值,从 for 循环返回的信息可以看到第 5 次 x 的值为 0,代码块的确执行了 5 次。
range 关键字的右边是 range 表达式,表达式一般写在 for 语句的前面,以便提高代码的易读性。
range 关键字的左边表示的是一对“索引-值”对,根据不同的表达式,返回不同的结果,range 右边表达式返回的类型如表1所示。
右边表达式返回的类型 | 第一个值 | 第二个值 |
---|---|---|
string | index | str[index],返回类型为 rune |
array/slice | index | str[index] |
map | key | m[]key |
channel | element | 无 |
range 右边表达式返回的类型,除了轮询字符串外,还包括数组、切片、字典及通道等,例如:
package main import "fmt" func main() { numbers := [5]int{1, 2, 3, 4} for i, x := range numbers { fmt.Printf("第%d次,x的值为%d.\n", i, x) } }运行结果如下:
第0次,x的值为1.
第1次,x的值为2.
第2次,x的值为3.
第3次,x的值为4.
第4次,x的值为0.
在以上代码中,定义了 numbers 的长度为5,但 numbers 中只有 4 个值,因此最后一个为空值,从 for 循环返回的信息可以看到第 5 次 x 的值为 0,代码块的确执行了 5 次。