Go 语言没有
while
和do...while
,所有循环控制统一通过for
实现。搭配range
关键字,可以高效遍历数组、切片、字符串、map 和 channel。
一、基本 for
语句
1. 经典三段式写法(类似 C)
for 初始化语句; 条件表达式; 递增语句 { // 循环体 }
示例:
for i := 0; i < 5; i++ { fmt.Println(i) }
二、for
等价 while
的写法
当只需要判断条件:
i := 0 for i < 5 { fmt.Println(i) i++ }
等价于其他语言中的 while
循环。
三、无限循环
for { fmt.Println("无限循环") // 可通过 break 或 return 退出 }
四、使用 break
和 continue
for i := 0; i < 10; i++ { if i == 3 { continue // 跳过当前这轮 } if i == 7 { break // 提前退出循环 } fmt.Println(i) }
五、使用 range
遍历结构
1. 遍历数组 / 切片
nums := []int{10, 20, 30} for index, value := range nums { fmt.Printf("下标:%d 值:%d\n", index, value) }
可忽略变量:
for _, val := range nums { fmt.Println(val) }
2. 遍历字符串(按 Unicode 字符)
s := "hello 世界" for i, r := range s { fmt.Printf("索引:%d 字符:%c\n", i, r) }
注:Go 中
range
字符串会按 rune(字符) 处理,不会出现 UTF-8 半个字符乱码问题。
3. 遍历 map
m := map[string]int{"A": 1, "B": 2} for k, v := range m { fmt.Printf("键:%s 值:%d\n", k, v) }
遍历 map 的顺序是随机的,每次运行顺序可能不同。
4. 遍历 channel
ch := make(chan int, 3) ch <- 1 ch <- 2 ch <- 3 close(ch) for v := range ch { fmt.Println(v) }
六、小结
用法 | 示例 |
经典计数循环 | for i := 0; i < n; i++ |
类似 while 循环 | for 条件 |
无限循环 | for {} |
遍历数组、map、字符串 | for k, v := range ... |
控制语句 | break , continue |