第十一回:Go 语言循环语句

烤鸡翅我最爱吃(For 循环)
唐伯虎
唐伯虎: 烧鸡翅,我喜欢吃~ 但是如果我有 100 只鸡翅要烤,总不能写 100 遍“烤鸡翅”吧?这就需要循环
华夫人
华夫人: 记住!Go 语言只有一种循环,就是 for。没有 while,没有 do-while,只有 for

🔄 华府磨坊 (For 循环的三种形态)

1. 标准形态 (The Classic)

和 C/Java 一样,但不需要括号。

// 初始化; 条件; 步进
for i := 0; i < 5; i++ {
    fmt.Println("烤鸡翅", i)
}

2. 简化形态 (The While)

省略前后,只留中间的条件,它就变成了 while。

hunger := 10
for hunger > 0 {
    fmt.Println("吃吃吃")
    hunger--
}

3. 狂暴形态 (The Infinite)

什么都不写,就是死循环。通常配合 break 使用。

for {
    fmt.Println("我对秋香的爱绵绵不绝")
    if 秋香答应了 {
        break // 跳出循环
    }
}

🏃‍♂️ 凌波微步 (Range 遍历)

这是用来遍历数组、切片、字符串、Map 的神器。

nums := []int{9, 5, 2, 7}
// k 是索引,v 是值
for k, v := range nums {
    fmt.Printf("第 %d 位是 %d\n", k, v)
}

// 如果只需要值,忽略索引
for _, v := range nums {
    fmt.Println(v)
}

🛑 点穴大法 (Break & Continue)

高级招式:Label (标签)

当你有双重循环(比如在找秋香)时,普通的 break 只能跳出一层。要想直接跳出所有循环,得用 Label。

FindLove: // 定义一个标签
    for i := 0; i < 10; i++ {
        for j := 0; j < 10; j++ {
            if i==5 && j==2 {
                fmt.Println("找到秋香了!")
                break FindLove // 直接跳到标签处,结束所有循环
            }
        }
    }

🎯 练功房(数家丁)

计算 1 加到 100 的总和。

package main
import "fmt"

func main() {
    sum := 0
    for i := 1; i <= 100; i++ {
        sum += i
    }
    fmt.Println(sum)
}

任务: 如果我只想计算偶数的和(2+4+6...),应该怎么改?

方法一: 步进改为 2

for i := 2; i <= 100; i += 2 { sum += i }

方法二: 使用 continue

for i := 1; i <= 100; i++ {
    if i % 2 != 0 {
        continue // 奇数跳过
    }
    sum += i
}