深入了解Go语言:range关键字实战解析

发表时间: 2024-06-05 16:52

range是Golang中的关键字,用于迭代数组(array)、切片(slice)、映射(map)和通道(channel)的关键字。

遍历数组和切片

对于数组和切片,`range`返回两个值:索引和该索引处的元素值。

slice := []int{1, 2, 3, 4, 5}for index, value := range slice {		fmt.Printf("Index: %d, Value: %d\n", index, value)}

只用到值的时候,可以省略索引:

for _, value := range slice {		fmt.Println(value)}

遍历map

对于映射,range返回两个值:键和对应的值。

m := map[string]int{"one": 1, "two": 2, "three": 3}for key, value := range m {			fmt.Printf("Key: %s, Value: %d\n", key, value)}

同样,只用到值的时候,可以省略键:

for _, value := range m {	   fmt.Println(value)}


注意:由于映射是无序的,因此迭代映射时元素的顺序可能因不同程序运行而异。

遍历channel通道

对于通道,`range`会阻塞,直到通道关闭并且没有更多的值可以接收。

ch := make(chan int)go func() {for i := 0; i < 5; i++ {ch <- i}// 当不再往通道里面写入数据的时候需要close(ch)}()for value := range ch {			fmt.Println(value)}

通过上面的学习,我们学习使用range关键字来遍历数组、切片、map和channel等数据结构

官网的完整示例(
https://gobyexample.com/range)为:

package mainimport "fmt"func main() {    nums := []int{2, 3, 4}    sum := 0    for _, num := range nums {        sum += num    }    fmt.Println("sum:", sum)    for i, num := range nums {        if num == 3 {            fmt.Println("index:", i)        }    }    kvs := map[string]string{"a": "apple", "b": "banana"}    for k, v := range kvs {        fmt.Printf("%s -> %s\n", k, v)    }    for k := range kvs {        fmt.Println("key:", k)    }    for i, c := range "go" {        fmt.Println(i, c)    }}