循环语句:for、range -《Go语言实战指南》

Go 语言没有 whiledo...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 退出
}

四、使用 breakcontinue

复制代码
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
相关推荐
土豆南瓜饼几秒前
关于mybatis-plus的一些默认配置
java
Juchecar2 分钟前
Java示例:设计模式是如何在实战中“自然生长”出来
java·设计模式
能摆一天是一天3 分钟前
JAVA Function
java
The Sheep 20233 分钟前
Dotnet-Dapper的用法
java·开发语言
耳总是一颗苹果5 分钟前
数据结构---时空复杂度
数据结构
立志成为大牛的小牛10 分钟前
数据结构——四十、折半查找(王道408)
数据结构·学习·程序人生·考研·算法
SimonKing19 分钟前
百度统计、Google Analytics平替开源网站分析工具:Umami
java·后端·程序员
Juchecar24 分钟前
设计模式不是Java专属,其他语言的使用方法
java·python·设计模式
王哈哈^_^24 分钟前
【完整源码+数据集】蓝莓数据集,yolo11蓝莓成熟度检测数据集 3023 张,蓝莓成熟度数据集,目标检测蓝莓识别算法系统实战教程
人工智能·算法·yolo·目标检测·计算机视觉·ai·视觉检测
马克学长31 分钟前
SSM基于Java的医疗器械销售系统oy281(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
java·开发语言·用户管理·ssm 框架·医疗器械销售系统