条件语句 #
一、if语句 #
1.1 基本语法 #
go
if 条件 {
// 条件为true时执行
}
示例:
go
age := 18
if age >= 18 {
fmt.Println("成年人")
}
1.2 条件不需要括号 #
Go的if语句条件不需要括号:
go
if age >= 18 { // 正确
fmt.Println("成年人")
}
if (age >= 18) { // 也可以,但不推荐
fmt.Println("成年人")
}
1.3 大括号必须 #
大括号必须有,且左大括号必须在同一行:
go
if age >= 18 {
fmt.Println("成年人")
}
if age >= 18
{ // 错误!左大括号必须同一行
fmt.Println("成年人")
}
二、if-else语句 #
2.1 基本语法 #
go
if 条件 {
// 条件为true时执行
} else {
// 条件为false时执行
}
示例:
go
age := 16
if age >= 18 {
fmt.Println("成年人")
} else {
fmt.Println("未成年人")
}
2.2 else必须在同一行 #
go
if age >= 18 {
fmt.Println("成年人")
}
else { // 错误!else必须与}在同一行
fmt.Println("未成年人")
}
三、if-else if-else语句 #
3.1 基本语法 #
go
if 条件1 {
// 条件1为true时执行
} else if 条件2 {
// 条件2为true时执行
} else {
// 所有条件都为false时执行
}
示例:
go
score := 85
if score >= 90 {
fmt.Println("优秀")
} else if score >= 80 {
fmt.Println("良好")
} else if score >= 60 {
fmt.Println("及格")
} else {
fmt.Println("不及格")
}
四、初始化语句 #
4.1 基本语法 #
if语句可以包含初始化语句:
go
if 初始化语句; 条件 {
// 执行体
}
4.2 示例 #
go
if age := 18; age >= 18 {
fmt.Println("成年人")
}
// 等价于
age := 18
if age >= 18 {
fmt.Println("成年人")
}
4.3 变量作用域 #
初始化语句中的变量只在if块内有效:
go
if score := 85; score >= 60 {
fmt.Println("及格")
}
// fmt.Println(score) // 错误:score未定义
4.4 实际应用 #
go
if err := doSomething(); err != nil {
fmt.Println("发生错误:", err)
return
}
五、嵌套if #
go
age := 25
hasLicense := true
if age >= 18 {
if hasLicense {
fmt.Println("可以驾驶")
} else {
fmt.Println("需要考取驾照")
}
} else {
fmt.Println("未成年")
}
六、条件表达式 #
6.1 布尔表达式 #
go
isActive := true
if isActive {
fmt.Println("已激活")
}
6.2 比较表达式 #
go
a, b := 10, 20
if a < b {
fmt.Println("a小于b")
}
6.3 逻辑表达式 #
go
age := 25
hasLicense := true
if age >= 18 && hasLicense {
fmt.Println("可以驾驶")
}
6.4 函数调用 #
go
if isEven(10) {
fmt.Println("偶数")
}
func isEven(n int) bool {
return n%2 == 0
}
七、实际应用 #
7.1 错误处理 #
go
file, err := os.Open("test.txt")
if err != nil {
fmt.Println("打开文件失败:", err)
return
}
defer file.Close()
7.2 参数验证 #
go
func divide(a, b int) (int, error) {
if b == 0 {
return 0, errors.New("除数不能为0")
}
return a / b, nil
}
7.3 范围检查 #
go
func isValidAge(age int) bool {
if age < 0 || age > 150 {
return false
}
return true
}
7.4 状态判断 #
go
type Status int
const (
StatusPending Status = iota
StatusApproved
StatusRejected
)
func getStatusText(status Status) string {
if status == StatusPending {
return "待审核"
} else if status == StatusApproved {
return "已通过"
} else {
return "已拒绝"
}
}
八、常见错误 #
8.1 忘记大括号 #
go
if age >= 18
fmt.Println("成年人") // 错误:缺少大括号
8.2 左大括号换行 #
go
if age >= 18
{ // 错误
fmt.Println("成年人")
}
8.3 else换行 #
go
if age >= 18 {
fmt.Println("成年人")
}
else { // 错误
fmt.Println("未成年人")
}
8.4 条件中使用赋值 #
go
a := 10
if a = 20 { // 错误:条件中不能使用赋值
fmt.Println(a)
}
// 正确
if a == 20 {
fmt.Println(a)
}
九、最佳实践 #
9.1 早返回 #
go
func process(data []int) error {
if len(data) == 0 {
return errors.New("数据为空")
}
// 处理逻辑
return nil
}
9.2 避免深层嵌套 #
go
// 不推荐
if a > 0 {
if b > 0 {
if c > 0 {
fmt.Println("都大于0")
}
}
}
// 推荐
if a <= 0 {
return
}
if b <= 0 {
return
}
if c <= 0 {
return
}
fmt.Println("都大于0")
9.3 使用初始化语句 #
go
// 推荐
if err := doSomething(); err != nil {
return err
}
// 不推荐
err := doSomething()
if err != nil {
return err
}
十、总结 #
条件语句要点:
| 语法 | 说明 |
|---|---|
| if 条件 | 基本if语句 |
| if 条件 { } else | if-else语句 |
| if 条件 { } else if { } else | 多条件判断 |
| if 初始化; 条件 | 带初始化的if |
关键点:
- 条件无括号:条件表达式不需要括号
- 大括号必须:执行体必须有大括号
- 左大括号同行:左大括号必须在条件同一行
- else同行:else必须与前一个}在同一行
- 初始化语句:可以在条件前添加初始化语句
准备好学习switch语句了吗?让我们进入下一章!
最后更新:2026-03-26