Go 语言函数

Go 语言循环语句讲解

关键点:

  • Go 语言只有 for 循环,没有 while 或 do-while,是唯一循环结构。
  • for 循环有三种形式:经典形式(初始化-条件-迭代)、类似 while 的形式和无限循环。
  • 支持 for-range 迭代数组、切片、字符串和映射,特别适合处理中文字符。
  • 研究表明,for 循环的设计简洁高效,适合各种场景,争议较少。

经典 for 循环

用于指定次数的循环,例如:

for i := 0; i < 10; i++ {
    fmt.Println(i)
}

输出 0 到 9,适合计数或重复固定次数的操作。

类似 while 的循环

类似于其他语言的 while,例如:

i := 0
for i < 10 {
    fmt.Println(i)
    i++
}

效果与经典 while 类似,适合条件驱动的循环。

无限循环和 for-range

无限循环使用 for {},需手动 break 退出;for-range 适合迭代集合,例如:

slice := []int{1, 2, 3}
for index, value := range slice {
    fmt.Printf("索引: %d, 值: %d\n", index, value)
}

输出索引和值,特别适合处理中文字符串。

更多详细内容可参考 菜鸟教程 – Go 语言 for 循环 和 Go语言中文文档 – 循环语句for


Go 语言循环语句详细讲解

以下是 Go 语言循环语句的全面分析,涵盖所有相关细节,适合深入学习和参考。

概述

Go 语言的循环语句是程序控制流的重要部分,用于重复执行代码块。Go 语言中唯一支持的循环结构是 for 循环,没有 while 或 do-while,这与许多其他编程语言不同。for 循环的设计简洁高效,支持多种形式,包括经典循环、类似 while 的循环、无限循环和 for-range 迭代。

for 循环的三种基本形式

根据 菜鸟教程 – Go 语言 for 循环 和 Go语言中文文档 – 循环语句for,Go 的 for 循环有三种主要形式:

  1. 经典 for 循环
    • 语法for init; condition; post { // 循环体 }
    • 说明
      • init: 初始化语句,通常用于声明和初始化循环变量,例如 i := 0
      • condition: 循环条件,布尔表达式,决定是否继续循环,例如 i < 10
      • post: 每次迭代后执行的语句,通常是变量的增量或减量,例如 i++
    • 执行过程
      1. 执行 init 初始化。
      2. 检查 condition,如果为真,执行循环体,然后执行 post,回到步骤 2;如果为假,循环终止。
    • 示例package main import "fmt" func main() { for i := 0; i < 10; i++ { fmt.Println(i) } } 输出:0 1 2 3 4 5 6 7 8 9。
  2. 类似 while 的循环
    • 语法for condition { // 循环体 }
    • 说明
      这类似于其他语言的 while 循环,条件为真时执行循环体。
    • 示例i := 0 for i < 10 { fmt.Println(i) i++ } 输出与经典 for 循环相同,0 到 9。
  3. 无限循环
    • 语法for { // 循环体 }
    • 说明
      这类似于 C 语言的 for(;;),条件恒为真,需要手动通过 break 或其他条件退出。
    • 示例for { fmt.Println("无限循环") break // 手动退出 } 输出:无限循环(仅一次,因有 break)。

for-range 循环

for-range 是 Go 语言中迭代集合(如数组、切片、字符串、映射)的便捷方式,特别适合处理复杂数据结构。

  • 语法for key, value := range collection { // 循环体 }
    • key: 索引或键,取决于集合类型。
    • value: 元素值。
    • 可以省略 key 或 value,例如:
      • 仅获取键:for key := range collection 或 for key, _ := range collection
      • 仅获取值:for _, value := range collection
  • 适用场景
    • 数组、切片:迭代索引和值。
    • 字符串:特别适合处理 UTF-8 编码的字符串,例如中文字符。
    • 映射:迭代键值对。
    • 通道:用于并发编程。
  • 示例
    • 切片迭代:slice := []int{1, 2, 3, 4, 5} for index, value := range slice { fmt.Printf("索引: %d, 值: %d\n", index, value) } 输出:索引: 0, 值: 1 索引: 1, 值: 2 索引: 2, 值: 3 索引: 3, 值: 4 索引: 4, 值: 5
    • 字符串迭代(处理中文):str := "东秀璋" for _, char := range []rune(str) { fmt.Printf("%c ", char) } 输出:东 秀 璋(正确处理中文字符)。

循环嵌套

Go 支持在 for 循环中嵌套其他 for 循环,适合处理多维数据或复杂逻辑。

  • 语法for outerCondition { for innerCondition { // 内层循环体 } // 外层循环体 }
  • 示例:打印 9×9 乘法表for i := 1; i <= 9; i++ { for j := 1; j <= i; j++ { fmt.Printf("%d*%d=%d ", i, j, i*j) } fmt.Println() } 输出:1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 ...

循环控制语句

Go 提供以下循环控制语句:

  • break: 终止当前循环,可以与标签配合使用,跳出嵌套循环。
  • continue: 跳过当前迭代,继续下一次循环。
  • goto: 无条件跳转到指定标签,通常不推荐使用。
  • 示例for i := 0; i < 10; i++ { if i == 5 { continue // 跳过 i=5 } fmt.Println(i) if i == 7 { break // 终止循环 } } 输出:0 1 2 3 4 6 7(跳过 5,终止于 7 后)。

编程练习

以下是一些常见的编程练习,帮助加深对 Go 循环语句的理解:

练习题目描述
计算 1 到 100 的和使用 for 循环累加
输出 1 到 100 之间的质数嵌套循环判断每个数的因数
模拟用户登录允许三次输入机会,验证用户名密码
生成随机数直到 99统计尝试次数,使用无限循环
打印 4×5 矩阵使用嵌套循环输出特定格式
斐波那契数列前 10 项使用循环生成序列

示例:计算 1 到 100 的和

sum := 0
for i := 1; i <= 100; i++ {
    sum += i
}
fmt.Println(sum) // 输出 5050

优化建议

  • 在初始化语句中计算复杂表达式,避免重复计算,例如:for i, n := 0, len(s); i < n; i++ { // 避免每次循环调用 len(s) }
  • 对于字符串迭代,特别注意中文字符的 UTF-8 编码,使用 []rune 处理。

总结与资源

Go 语言的循环语句设计简洁高效,for 循环是唯一结构,支持多种形式,适合各种场景。初学者可通过以下资源深入学习:

这些资源提供了详细的代码示例和语法说明,帮助用户快速掌握 Go 语言循环语句。

关键引用

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注