Go 循环
Go - 循环
Section titled “Go - 循环”循环是基本的控制结构,允许您重复执行一段代码块。Go 只有一种循环结构,即 for 循环,但它功能多样,足以涵盖其他语言中各种循环场景(如 while 或 do-while 循环)。
for 循环
Section titled “for 循环”Go 的 for 循环可以通过几种方式使用:
1. 完整的 for 循环 (C 风格)
Section titled “1. 完整的 for 循环 (C 风格)”这种形式包含一个初始化语句(initialization statement)、一个条件表达式(condition expression)和一个后置语句(post statement)。
package main
import "fmt"
func main() { for i := 0; i < 5; i++ { fmt.Println("Iteration:", i) // 输出 0, 1, 2, 3, 4 }}2. 将 for 循环用作 while 循环
Section titled “2. 将 for 循环用作 while 循环”通过省略初始化语句和后置语句,for 循环的行为类似于其他语言中的 while 循环。
package main
import "fmt"
func main() { n := 1 for n <= 5 { fmt.Println("n is:", n) n *= 2 // n 变为 1, 2, 4, 8 (当 n=8 时循环退出) }}3. 无限 for 循环
Section titled “3. 无限 for 循环”如果条件也被省略,则会创建一个无限循环。这种循环必须通过循环体内的 break 或 return 语句,或通过其他方式(例如,panic)退出。
package main
import ( "fmt" "time")
func main() { count := 0 for { fmt.Println("Infinite loop iteration...") time.Sleep(500 * time.Millisecond) count++ if count >= 3 { fmt.Println("退出无限循环。") break } } // 注意: 在命令行程序中,通常可以通过按下 Ctrl + C 来终止无限循环。}4. for...range 循环
Section titled “4. for...range 循环”这种形式遍历切片(slices)、数组(arrays)、字符串(strings)、映射(maps)和通道(channels)等各种数据结构中的元素。它在“Go - Range”章节中详细介绍。
循环控制语句
Section titled “循环控制语句”Go 提供了用于改变循环正常执行流程的语句:
| 控制语句 | 描述 |
|---|---|
break | 终止最内层的 for、switch 或 select 语句。执行将在被终止的循环/switch/select 语句之后立即恢复。 |
continue | 跳过最内层 for 循环当前迭代的剩余部分。执行将进入 post 语句(如果有),然后是下一次迭代的条件判断。 |
goto | 将控制权转移到同一函数内带有标签的语句。通常不建议使用 goto,因为它会使代码复杂且难以理解。在惯用的 Go 代码中很少需要它。 |
示例: break 和 continue
package main
import "fmt"
func main() { // 使用 continue 打印奇数 fmt.Println("Odd numbers up to 10 (using continue):") for i := 1; i <= 10; i++ { if i%2 == 0 { // 如果 i 是偶数 continue // 跳过本次迭代的剩余部分 } fmt.Printf("%d ", i) } fmt.Println()
// 使用 break 查找第一个能被 3 和 5 整除的数字 fmt.Println("\nFinding first number divisible by 3 and 5 (using break):") for i := 1; i <= 100; i++ { if i%3 == 0 && i%5 == 0 { fmt.Printf("Found: %d\n", i) break // 一旦找到就退出循环 } }}您可以在其他 for 循环内使用 for 循环。break 和 continue 语句作用于最内层循环,除非使用了标签(label)。
package main
import "fmt"
func main() {OuterLoop: // 外部循环的标签 for i := 1; i <= 3; i++ { for j := 1; j <= 3; j++ { fmt.Printf("i=%d, j=%d\n", i, j) if i == 2 && j == 2 { fmt.Println("Breaking out of OuterLoop from inner loop") break OuterLoop // 带有标签的 break 语句 } } }}for 循环是 Go 中一个强大且灵活的构造,可以适应所有常见的循环模式。