概述
Go 特有的一种的遍历构造。它能够遍历任何一个 汇合(字符串、数组、切片、Map、通道等)
。
语法上相似支流编程语言中的 foreach
语句,但能够取得每次遍历对应的索引。
语法规定
// key 和 val 也能够应用别的变量名称,比方 index, item 等for key, val := range collection { // do something}
遍历规定
其中,key
和 val
都能够应用 空白标识符 省略,具体规定如下:
- 如果
key
和val
都保留,那么在循环体中必须应用这 2 个变量,语法如下:
for key, val := range collection { // do something}
- 如果省略
val
, 不须要 空白标识符,语法如下:
for key := range collection { // do something}
- 如果省略
key
, 则 key 的地位须要 空白标识符,语法如下:
for _, val := range collection { // do something}
- 如果
key
和val
全副省略,那么只执行循环体中的代码,语法如下:
for _, _ = range collection { // do something}
遍历字符串
key, val 都保留
package mainimport "fmt"func main() { str := "hello" for key, val := range str { fmt.Printf("key = %d, val = %c\n", key, val) }}// $ go run main.go// 输入如下 /** key = 0, val = h key = 1, val = e key = 2, val = l key = 3, val = l key = 4, val = o*/
省略 key
package mainimport "fmt"func main() { str := "hello" for _, val := range str { fmt.Printf("val = %c\n", val) }}// $ go run main.go// 输入如下 /** val = h val = e val = l val = l val = o*/
省略 val
package mainimport "fmt"func main() { str := "hello" for key := range str { fmt.Printf("key = %d\n", key) }}// $ go run main.go// 输入如下 /** key = 0 key = 1 key = 2 key = 3 key = 4*/
key, val 都省略
package mainfunc main() { str := "hello" for _, _ = range str { println("do something") }}// $ go run main.go// 输入如下 /** do something do something do something do something do something*/
小结
本大节只应用 字符串
作为演示,对于其余的数据结构 (数组、切片、Map、通道等)
, range
语法都差不多。
前面介绍其余数据结构时,会附加应用 range
遍历操作的内容。