使用 for range 遍历 数组,切片,字符串,map,以及通道(channel)
range expression | 第一个参数 | 第二个参数 | 备注 |
array[n]E,*[n]E | 索引 | 值 | |
slice []E | 索引 | 值 | |
string abcd | 索引 | 值 | 对于string,range迭代的是Unicode而不是字节,所以返回的值是rune |
mapmap[k]v | 键 | 值 | |
channel | 通道内的值 | none | 遍历channel时,则只有一个返回数据 |
用例
package main
import (
"fmt"
"time"
)
func main() {
num := []int{1, 3, 5}
//遍历数组、切片 获取索引和元素
for k1, v1 := range num {
fmt.Printf("key:= %d, value:= %d\n", k1, v1)
}
//遍历字符串
var str = "hi"
for sk, sv := range str {
fmt.Printf("key: %d value: 0x%x\n", sk, sv)
}
//遍历map 获取map的键和值
m := map[string]int{
"a": 100,
"b": 200,
}
for mk, mv := range m {
fmt.Printf("map key = %s , map value = %d \n", mk, mv)
}
//遍历通道
c := make(chan int)
go func() {
c <- 1
c <- 3
close(c)
}()
time.Sleep(2 * time.Second)
for cv := range c {
fmt.Println(cv)
}
}
输出结果:
key:= 0, value:= 1
key:= 1, value:= 3
key:= 2, value:= 5
key: 0 value: 0x68
key: 1 value: 0x69
map key = a , map value = 100
map key = b , map value = 200
1
3