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

简介: Go 语言使用 `for` 实现所有循环控制,无 `while` 和 `do...while`。支持经典三段式、条件判断(类似 `while`)、无限循环及 `range` 遍历数组、切片、字符串、map 和 channel。配合 `break` 和 `continue` 控制流程,字符串遍历按 Unicode 处理,避免乱码问题,map 遍历顺序随机。总结涵盖多种用法,灵活高效。

 

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

 

相关文章
|
1月前
|
监控 Dart 算法
《揭秘!Flutter社交应用如何光速修复线上BUG》
热更新是Flutter社交应用中一项关键技术,可快速修复线上BUG、优化用户体验。它通过在运行时替换代码和资源,无需用户重新下载应用,极大减少损失并维护口碑。然而,热更新也面临兼容性、安全性和性能挑战,需加密签名、压缩算法等手段保障。未来,智能化热更新将根据用户习惯自动调整,进一步提升稳定性和效率,助力应用在竞争中脱颖而出。
64 17
|
1月前
|
SQL 数据挖掘 关系型数据库
【SQL 周周练】一千条数据需要做一天,怎么用 SQL 处理电表数据(如何动态构造自然月)
题目来自于某位发帖人在某 Excel 论坛的求助,他需要将电表缴费数据按照缴费区间拆开后再按月份汇总。当时用手工处理数据,自称一千条数据就需要处理一天。我将这个问题转化为 SQL 题目。
91 12
|
1月前
|
机器学习/深度学习 设计模式 人工智能
深度解析Agent实现,定制自己的Manus
文章结合了理论分析与实践案例,旨在帮助读者系统地认识AI Agent的核心要素、设计模式以及未来发展方向。
794 99
深度解析Agent实现,定制自己的Manus
|
27天前
|
Go
匿名函数与闭包(Anonymous Functions and Closures)-《Go语言实战指南》
本文介绍了 Go 语言中的匿名函数与闭包特性。匿名函数是没有名字的函数,可立即调用或赋值使用;闭包能捕获外部变量并持续访问,适用于状态保存、工厂函数等场景。同时,文章探讨了闭包在并发中的注意事项,并通过示例展示了其用法。这些特性为 Go 提供了函数式编程的能力,增强了代码灵活性与抽象能力。
|
12天前
|
Go 开发者
Go语言包的组织与导入 -《Go语言实战指南》
本章详细介绍了Go语言中的包(Package)概念及其使用方法。包是实现代码模块化、复用性和可维护性的核心单位,内容涵盖包的基本定义、命名规则、组织结构以及导入方式。通过示例说明了如何创建和调用包,并深入讲解了`go.mod`文件对包路径的管理。此外,还提供了多种导入技巧,如别名导入、匿名导入等,帮助开发者优化代码结构与可读性。最后以表格形式总结了关键点,便于快速回顾和应用。
108 61
|
2月前
|
人工智能 网络协议 Linux
MCP 协议: Streamable HTTP 是最佳选择
随着AI应用变得越来越复杂并被广泛部署,原有的通信机制面临着一系列挑战。近期MCP仓库的PR #206引入了一个全新的Streamable HTTP传输层替代原有的HTTP+SSE传输层。本文将详细分析该协议的技术细节和实际优势。
1172 98
|
25天前
|
人工智能 安全 API
Higress MCP Server 安全再升级:API 认证为 AI 连接保驾护航
Higress MCP Server 新增了 API 认证功能,为 AI 连接提供安全保障。主要更新包括:1) 客户端到 MCP Server 的认证,支持 Key Auth、JWT Auth 和 OAuth2;2) MCP Server 到后端 API 的认证,增强第二阶段的安全性。新增功能如可重用认证方案、工具特定后端认证、透明凭证透传及灵活凭证管理,确保安全集成更多后端服务。通过 openapi-to-mcp 工具简化配置,减少手动工作量。企业版提供更高可用性保障,详情参见文档链接。
325 42
|
1月前
|
Java 关系型数据库 MySQL
在Linux操作系统上设置JDK、Tomcat、MySQL以及J2EE后端接口的部署步骤
让我们总结一下,给你的Linux操作系统装备上最强的军队,需要先后装备好JDK的弓箭,布置好Tomcat的阵地,再把MySQL的物资原料准备好,最后部署好J2EE攻城车,那就准备好进军吧,你的Linux军团,无人可挡!
64 18
|
26天前
|
Go 索引
Go语言数组的定义与操作 - 《Go语言实战指南》
本文介绍了 Go 语言中的数组(Array)相关知识,包括定义、初始化方式(默认、显式、指定索引及自动推导长度)、访问与修改、遍历方法(for 循环和 for range)、值类型特性(复制行为)、多维数组支持以及其与切片的区别。数组是定长且同类型的集合,适合性能敏感场景,但实际开发中更常用动态的切片(slice)。