Skip to content
目录

流程控制 (Flow Control)

流程控制是编程语言的骨架,决定了代码的执行顺序。Go 语言的流程控制语句非常精炼,主要包括 if(条件判断)、for(循环)、switch(分支)和 goto(跳转)。

1. 条件判断 (if)

Go 的 if 语句看起来和 C/Java 很像,但有两个显著区别:

  1. 条件表达式不需要括号 ()
  2. 左大括号 { 必须和 if 在同一行。

1.1 基本用法

go
age := 20
if age > 18 {
    fmt.Println("已成年")
} else {
    fmt.Println("未成年")
}

1.2 if 初始语句

Go 允许在 if 条件之前执行一个简单的语句(通常是变量声明),用分号 ; 隔开。这个变量的作用域仅限于 if-else 代码块内部。

go
// score 变量只在 if 代码块内有效
if score := 90; score >= 90 {
    fmt.Println("优秀")
} else if score >= 60 {
    fmt.Println("及格")
} else {
    fmt.Println("不及格")
}
// fmt.Println(score) // ❌ 报错:undefined: score

2. 循环结构 (for)

Go 语言只有 for 循环,没有 whiledo-while。但 for 可以模拟出所有这些行为。

2.1 标准写法

go
// 初始化; 条件; 后置语句
for i := 0; i < 5; i++ {
    fmt.Println(i)
}

2.2 类似 while 的写法

省略初始化和后置语句,只保留条件,就变成了 while

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

2.3 无限循环

省略所有条件,就是死循环(通常配合 break 使用)。

go
for {
    fmt.Println("停不下来了...")
    break // 必须有跳出机制
}

2.4 for range (遍历)

这是 Go 中最常用的遍历方式,适用于数组、切片、字符串、Map 和 Channel。

go
s := "hello"
// i 是索引, v 是值(副本)
for i, v := range s {
    fmt.Printf("索引:%d 值:%c\n", i, v)
}

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

3. 分支结构 (switch)

Go 的 switch 比 C/Java 更加灵活强大。

  1. case 默认自带 break,匹配成功后不会穿透到下一个 case。
  2. case 可以匹配多个值。
  3. switch 也可以没有表达式,替代复杂的 if-else 链。

3.1 基本用法

go
day := "Monday"
switch day {
case "Monday", "Tuesday":
    fmt.Println("工作日")
case "Saturday", "Sunday":
    fmt.Println("周末")
default:
    fmt.Println("其他")
}

3.2 强制穿透 (fallthrough)

如果你希望匹配后继续执行下一个 case,需要显式使用 fallthrough 关键字。

go
score := 60
switch {
case score >= 60:
    fmt.Println("及格了")
    fallthrough // 继续向下执行
case score >= 50:
    fmt.Println("至少50分") // 这一行也会被打印
}

3.3 类型分支 (Type Switch)

switch 还可以用来判断接口变量的实际类型。

go
var x any = "hello"

switch v := x.(type) {
case string:
    fmt.Println("是字符串:", v)
case int:
    fmt.Println("是整数:", v)
default:
    fmt.Println("未知类型")
}

4. 跳转控制 (break / continue / goto)

  • break: 跳出当前循环或 switch。
  • continue: 跳过本次循环,进入下一次。
  • goto: 跳转到指定标签(不推荐滥用)。

4.1 配合标签 (Label)

在多层嵌套循环中,break 默认只能跳出最近的一层。如果想直接跳出最外层,需要配合标签。

go
Loop: // 定义标签
    for i := 0; i < 3; i++ {
        for j := 0; j < 3; j++ {
            if i == 1 && j == 1 {
                break Loop // 直接跳出最外层 Loop
            }
            fmt.Println(i, j)
        }
    }

5. 实战:9x9 乘法表

go
for i := 1; i <= 9; i++ {
    for j := 1; j <= i; j++ {
        fmt.Printf("%d*%d=%d\t", j, i, i*j)
    }
    fmt.Println()
}

扫描下方二维码,私信【训练营】可进行咨询和报名。 微信公众号二维码

最后一次更新于:

🚀 学习遇到瓶颈?想进大厂?

看完这篇技术文章,如果还是觉得不够系统,或者想在实战中快速提升?
王中阳的就业陪跑训练营,提供定制化学习路线 + 企业级实战项目 + 简历优化 + 模拟面试。

了解训练营详情