深入了解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)}
对于映射,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)}
注意:由于映射是无序的,因此迭代映射时元素的顺序可能因不同程序运行而异。
对于通道,`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) }}