循环语句: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
相关推荐
地平线开发者7 小时前
J6B vio scenario sample
算法
Flittly15 小时前
【AgentScope Java新手村系列】(16)从RAG到多路检索
java·spring boot·spring
小兔崽子去哪了15 小时前
Java 生成二维码解决方案
java·后端
BothSavage19 小时前
Trae远程开发中DeepSeek自定义模型4054错误的排查与修复
算法
小林ixn19 小时前
从暴力到KMP:一道题彻底搞懂字符串匹配的前世今生
算法
人活一口气19 小时前
从JVM调优到MCP协议:Java全栈技术体系深度总结与企业级架构实践
java·spring boot
烬羽21 小时前
字符串算法入门:从反转字符串到回文判断,面试不再慌
算法·面试
NE_STOP21 小时前
Vibe Coding -- 完整项目案例实操
java
荣码21 小时前
GraphRAG:普通RAG只能回答"点"的问题,我踩了4个坑才搞懂
java·python