1. 基本 if 语句
Go 的 if 不需要括号包裹条件,条件为 true 时执行代码块:
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 分支:
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 多分支链
多个条件按顺序判断,匹配第一个满足的分支:
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-case fall-through 问题,else if 天然只匹配一个分支
4. if 语句中的初始化(if with init statement)
Go 支持在 if 条件前添加初始化语句,用分号分隔。初始化变量的作用域仅限 if-else 块内:
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 的特色语法,常用于先获取值再判断的场景:
if err := doSomething(); err != nil { // 处理错误,err 只在这个 if 块内有效 } // err 在这里不可访问,避免污染外层作用域 好处:变量不需要在外层声明,避免作用域污染
5. 嵌套 if 语句
if 可以嵌套使用,内层 if 在外层条件满足时才判断:
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 选其一"
知识点总结
<table style="font-size: 15px;border-collapse: collapse;border-color: rgb(222, 224, 227);max-width: 526px !important;"><tbody><tr><td style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;padding: 8px;border: 1px solid rgb(204, 204, 204);white-space: normal;line-height: 2em;"><span style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-weight: 400;width: inherit;word-break: break-all;display: inline-block;text-align: left;"><span key="91"><span leaf="">知识点</span></span></span></td><td style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;padding: 8px;border: 1px solid rgb(204, 204, 204);white-space: normal;line-height: 2em;"><span style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-weight: 400;width: inherit;word-break: break-all;display: inline-block;text-align: left;"><span key="93"><span leaf="">关键概念</span></span></span></td></tr><tr><td style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;padding: 8px;border: 1px solid rgb(204, 204, 204);white-space: normal;line-height: 2em;"><span style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-weight: 400;width: inherit;word-break: break-all;display: inline-block;text-align: left;"><span key="95"><span leaf="">基本 if</span></span></span></td><td style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;padding: 8px;border: 1px solid rgb(204, 204, 204);white-space: normal;line-height: 2em;"><span style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-weight: 400;width: inherit;word-break: break-all;display: inline-block;text-align: left;"><span key="97"><span leaf="">条件不需要括号,</span></span></span></td></tr><tr><td style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;padding: 8px;border: 1px solid rgb(204, 204, 204);white-space: normal;line-height: 2em;"><span style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-weight: 400;width: inherit;word-break: break-all;display: inline-block;text-align: left;"><span key="99"><span leaf="">if-else</span></span></span></td><td style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;padding: 8px;border: 1px solid rgb(204, 204, 204);white-space: normal;line-height: 2em;"><span style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-weight: 400;width: inherit;word-break: break-all;display: inline-block;text-align: left;"><span key="101"><span leaf="">true 走 if,false 而走 else</span></span></span></td></tr><tr><td style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;padding: 8px;border: 1px solid rgb(204, 204, 204);white-space: normal;line-height: 2em;"><span style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-weight: 400;width: inherit;word-break: break-all;display: inline-block;text-align: left;"><span key="103"><span leaf="">if-else if-else</span></span></span></td><td style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;padding: 8px;border: 1px solid rgb(204, 204, 204);white-space: normal;line-height: 2em;"><span style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-weight: 400;width: inherit;word-break: break-all;display: inline-block;text-align: left;"><span key="105"><span leaf="">从上到下依次判断,匹配第一个为 true 的分支</span></span></span></td></tr><tr><td style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;padding: 8px;border: 1px solid rgb(204, 204, 204);white-space: normal;line-height: 2em;"><span style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-weight: 400;width: inherit;word-break: break-all;display: inline-block;text-align: left;"><span key="107"><span leaf="">if 初始化语句</span></span></span></td><td style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;padding: 8px;border: 1px solid rgb(204, 204, 204);white-space: normal;line-height: 2em;"><span style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-weight: 400;width: inherit;word-break: break-all;display: inline-block;text-align: left;"><span key="109"><span leaf="">if init; condition {}</span></span></span></td></tr><tr><td style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;padding: 8px;border: 1px solid rgb(204, 204, 204);white-space: normal;line-height: 2em;"><span style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-weight: 400;width: inherit;word-break: break-all;display: inline-block;text-align: left;"><span key="111"><span leaf="">嵌套 if</span></span></span></td><td style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;padding: 8px;border: 1px solid rgb(204, 204, 204);white-space: normal;line-height: 2em;"><span style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-weight: 400;width: inherit;word-break: break-all;display: inline-block;text-align: left;"><span key="113"><span leaf="">外层条件满足后才判断内层,层级不宜过深</span></span></span></td></tr></tbody></table>