在Go语言中,range
关键字用于迭代数组(slice)、字符串、映射(map)、通道(channel)或者是自定义的数据结构。使用range
可以更方便地遍历这些数据结构。
使用range
的具体语法为:
for index, value := range data { // 循环体 }
-
index
代表当前迭代的索引(下标),如果不需要可以使用下划线(_
)忽略。 -
value
代表当前迭代的值。
data
可以是数组(slice)、字符串、映射(map)或者通道(channel)。具体效果如下:
- 迭代数组(slice)或字符串:
arr := []int{1, 2, 3, 4, 5} for index, value := range arr { fmt.Printf("index: %d, value: %d\n", index, value) }
输出:
index: 0, value: 1 index: 1, value: 2 index: 2, value: 3 index: 3, value: 4 index: 4, value: 5
- 迭代映射(map):
m := map[string]int{"a": 1, "b": 2, "c": 3} for key, value := range m { fmt.Printf("key: %s, value: %d\n", key, value) }
输出:
key: a, value: 1 key: b, value: 2 key: c, value: 3
- 迭代通道(channel):
ch := make(chan int) go func() { for i := 1; i <= 5; i++ { ch <- i } close(ch) }() for value := range ch { fmt.Printf("value: %d\n", value) }
输出:
value: 1 value: 2 value: 3 value: 4 value: 5
此外,range
还可以用于迭代字符串,对于字符串,range
会按照Unicode字符迭代。例如:
str := "Hello, 世界" for index, value := range str { fmt.Printf("index: %d, value: %c\n", index, value) }
输出:
index: 0, value: H index: 1, value: e index: 2, value: l index: 3, value: l index: 4, value: o index: 5, value: , index: 6, value: index: 7, value: 世 index: 10, value: 界