Go if 语句学习笔记
1. 基本 if 语句
Go 的 if 不需要括号包裹条件,条件为 true 时执行代码块:
go
package main
import "fmt"
func main() {
age := 20
// 判断 age 是否 >= 18
if age >= 18 {
fmt.Println("You are an adult")
}
}
执行结果:
You are an adult
要点:
- 条件不需要括号:
if age >= 18而非if (age >= 18) - 大括号
{必须与if在同一行(分号规则要求) - 只有 true 分支,没有 false 分支时,条件不满足则什么都不做
2. if-else 语句
条件为 true 执行 if 分支,为 false 执行 else 分支:
go
package main
import "fmt"
func main() {
temperature := 25
if temperature > 30 {
fmt.Println("It's hot outside")
} else {
fmt.Println("It's not hot outside")
}
}
执行结果:
It's not hot outside
要点:
else分支在条件为 false 时执行else的{也必须与else在同一行temperature = 25,条件25 > 30为 false,所以走了 else 分支
3. if-else if-else 多分支链
多个条件按顺序判断,匹配第一个满足的分支:
go
package main
import "fmt"
func main() {
score := 85
if score >= 90 {
fmt.Println("Grade: A")
} else if score >= 80 {
fmt.Println("Grade: B")
} else if score >= 70 {
fmt.Println("Grade: C")
} else if score >= 60 {
fmt.Println("Grade: D")
} else {
fmt.Println("Grade: F")
}
}
执行结果:
Grade: B
要点:
- 条件从上到下依次判断,匹配第一个为 true 的分支后,后面的分支全部跳过
score = 85:>= 90为 false →>= 80为 true → 输出 B,后面的 C/D/F 分支不再判断else是兜底分支,所有条件都不满足时执行- Go 没有类似 C 的
switch-casefall-through 问题,else if天然只匹配一个分支
4. if 语句中的初始化(if with init statement)
Go 支持在 if 条件前添加初始化语句,用分号分隔。初始化变量的作用域仅限 if-else 块内:
go
package main
import "fmt"
func main() {
if x := 10 + 5; x > 12 {
fmt.Println("x is greater than 12")
} else {
fmt.Println("x is not greater than 12")
}
// x 在这里不可访问!
// fmt.Println(x) // 编译报错:undefined: x
}
执行结果:
x is greater than 12
要点:
-
if x := 10 + 5; x > 12--- 分号前是初始化语句,分号后是条件判断 -
x的作用域仅限if-else整个代码块(包括 else 分支),块外不可访问 -
这是 Go 的特色语法,常用于先获取值再判断的场景:
goif err := doSomething(); err != nil { // 处理错误,err 只在这个 if 块内有效 } // err 在这里不可访问,避免污染外层作用域 -
好处:变量不需要在外层声明,避免作用域污染
5. 嵌套 if 语句
if 可以嵌套使用,内层 if 在外层条件满足时才判断:
go
package main
import "fmt"
func main() {
age := 20
if age >= 16 {
if age >= 21 {
fmt.Println("Can drink alcohol")
} else {
fmt.Println("Can drive but not drink alcohol")
}
} else {
fmt.Println("Too young to drive")
}
}
执行结果:
Can drive but not drink alcohol
要点:
age = 20:外层age >= 16为 true → 进入内层 →age >= 21为 false → 输出 "Can drive but not drink alcohol"- 嵌套 if 的逻辑:先判断大前提(是否 >= 16),再判断小前提(是否 >= 21)
- 嵌套层级不宜过深(一般不超过 2-3 层),否则代码可读性差
- 嵌套 if 可以用 else if 改写为扁平结构,但逻辑含义不同:嵌套是"先满足 A,再看 B",else if 是"A/B/C 选其一"
知识点总结
| 知识点 | 关键概念 |
|---|---|
| 基本 if | 条件不需要括号,{ 必须与 if 同行 |
| if-else | true 走 if,false 而走 else |
| if-else if-else | 从上到下依次判断,匹配第一个为 true 的分支 |
| if 初始化语句 | if init; condition {} --- 变量作用域仅限 if-else 块,避免污染外层 |
| 嵌套 if | 外层条件满足后才判断内层,层级不宜过深 |