for 和 range 的语法和功能,以及如何使用它们遍历不同类型的数据结构
例如,我们可以使用 for range 遍历一个数组、切片、字符串、映射或者通道,获取它们的索引和值:
// 遍历数组
arr := [3]int{1, 2, 3}
for i, v := range arr {
fmt.Println(i, v) // 0 1; 1 2; 2 3
}
// 遍历切片
slice := []int{4, 5, 6}
for i, v := range slice {
fmt.Println(i, v) // 0 4; 1 5; 2 6
}
// 遍历字符串
str := "Hello"
for i, v := range str {
fmt.Println(i, string(v)) // 0 H; 1 e; 2 l; 3 l; 4 o
}
// 遍历映射
m := map[string]int{"a":1, "b":2}
for k, v := range m {
fmt.Println(k, v) // a 1; b 2 (无序)
}
// 遍历通道
ch := make(chan int)
go func() {
ch <-7
ch <-8
close(ch)
}()
for v := range ch {
fmt.Println(v) //7 ;8
}
如果遍历映射时,只需要键而不需要值,也可以省略第二个变量,避免值的拷贝。例如:
func main() {
m := map[string]int{"a":1, "b":2}
for k := range m {
fmt.Println(k)
}
}