Go 循环和控制结构
基本的 for 循环
for 循环是 Go 语言中唯一的循环结构,用法类似于 C 或 Java。它由三个部分组成,分别是初始化语句、条件表达式和后置语句。
初始化语句通常用于声明循环控制变量;条件表达式在每次迭代前求值,决定是否继续循环;后置语句在每次循环迭代后执行,通常用于更新循环变量。
for i := 0; i < 10; i++ {
    fmt.Println(i)
}
while 风格的 for 循环
Go 语言没有独立的 while 关键字,但可以通过省略 for 循环的初始化语句和后置语句,实现类似 while 循环的效果。
此时,for 循环只有条件表达式,当条件为 true 时继续循环。
计数器 := 0
for 计数器 < 10 {
    fmt.Println(计数器)
    计数器++
}
无限循环
当省略 for 循环的所有部分时,将创建一个无限循环。没有条件表达式,循环将永远执行下去,必须使用 break 或 return 来退出循环。
for {
    fmt.Println("无限循环")
    break // 必须有退出条件来结束循环
}
for 循环与 range
range 关键字用于在 for 循环中遍历数组、切片、字符串、映射或通道。使用 range 可以同时获取索引(或键)和对应的值,简化集合的迭代。
数字列表 := []int{2, 4, 6, 8}
for 索引, 值 := range 数字列表 {
    fmt.Printf("索引 %d,值 %d\n", 索引, 值)
}
使用 _ 忽略返回值
如果在遍历时不需要索引或键,可以使用 _ 来忽略。
数字列表 := []int{2, 4, 6, 8}
for _, 值 := range 数字列表 {
    fmt.Println("值", 值)
}
循环控制语句 break 和 continue
break 用于立即退出循环,而 continue 则跳过当前循环的剩余代码,直接开始下一次迭代。
for i := 1; i <= 10; i++ {
    if i%3 == 0 {
        fmt.Println("跳过", i)
        continue // 跳过当前迭代
    }
    if i == 8 {
        fmt.Println("在", i, "处退出循环")
        break // 退出循环
    }
    fmt.Println(i)
}
循环中变量的作用域
在 for 循环的初始化语句中声明的变量,其作用域仅限于循环内部,避免了变量污染外部作用域。
for i := 0; i < 5; i++ {
    fmt.Println(i)
}
// fmt.Println(i) // 这行代码将无法编译,因为 i 超出了作用域
注意事项
- 在使用无限循环时,一定要确保有合适的退出条件,以防止程序陷入死循环。
 - 使用 
range遍历时,如果不需要索引或键,使用_忽略可以提高代码可读性。 - 变量名应具备描述性,便于理解代码的作用。