在Go语言中,range
关键字用于迭代如数组、切片、映射(map)、字符串和通道(channel)等集合类型的元素。下面是一些使用range
的例子:
数组或切片
当你对数组或切片使用range
时,它会返回索引和对应的值。
arr := []int{
1, 2, 3, 4, 5}
for index, value := range arr {
fmt.Printf("Index: %d, Value: %d\n", index, value)
}
如果你只想要值而不需要索引,你可以使用空白标识符_
来忽略索引:
for _, value := range arr {
fmt.Println("Value:", value)
}
映射(map)
对于映射,range
会返回键和对应的值。
m := map[string]int{
"apple": 5, "banana": 3}
for key, value := range m {
fmt.Printf("%s: %d\n", key, value)
}
同样地,如果你只需要键或者值,你可以忽略另一个。
字符串
当遍历字符串时,range
会返回每个字符的Unicode码点(rune)及其索引位置。
str := "hello"
for index, runeValue := range str {
fmt.Printf("Index: %d, Rune: %c\n", index, runeValue)
}
通道(channel)
对于通道,range
可以用来持续接收直到通道关闭。
ch := make(chan int)
// 假设有一个goroutine向通道发送数据,并最终关闭通道
go func() {
for i := 0; i < 5; i++ {
ch <- i
}
close(ch)
}()
for value := range ch {
fmt.Println("Received:", value)
}
请注意,当使用range
遍历通道时,循环会在通道关闭之前一直阻塞并等待新的值。
以上就是range
在Go语言中的基本用法。根据你的具体需求,你可以选择性地应用这些方法。