range迭代
核心结论使用for range遍历数组、切片、字符串、map时默认会返回两个值第一个值元素位置 / 索引 / 键第二个值元素本身1. 遍历数组 / 切片返回索引下标、对应元素go运行package main import fmt func main() { arr : [3]int{11, 22, 33} slice : []string{a, b, c} // 接收两个返回值下标i元素v for i, v : range arr { fmt.Printf(位置%d元素%d\n, i, v) } fmt.Println(--------) for i, v : range slice { fmt.Printf(位置%d元素%s\n, i, v) } }输出plaintext位置0元素11 位置1元素22 位置2元素33 -------- 位置0元素a 位置1元素b 位置2元素c不需要其中一个值时用空白标识符_丢弃go运行// 只想要元素丢弃下标 for _, v : range slice { fmt.Println(v) } // 只想要下标丢弃元素 for i : range slice { fmt.Println(i) }2. 遍历字符串返回字节起始索引位置、Unicode字符(rune)go运行s : golang for pos, char : range s { fmt.Printf(位置%d字符%c\n, pos, char) }3. 遍历 map返回键key等价元素位置标识、值value元素本身go运行m : map[string]int{ 张三: 18, 李四: 20, } for k, v : range m { fmt.Printf(键(标识)%s值(元素)%d\n, k, v) }补充特殊情况通道 channel遍历通道时只返回 1 个值元素本身没有位置 / 索引不属于双返回值场景go运行ch : make(chan int, 2) ch - 10 ch - 20 close(ch) // 仅一个返回值无位置 for v : range ch { fmt.Println(v) }