条件语句 #

一、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

关键点:

  1. 条件无括号:条件表达式不需要括号
  2. 大括号必须:执行体必须有大括号
  3. 左大括号同行:左大括号必须在条件同一行
  4. else同行:else必须与前一个}在同一行
  5. 初始化语句:可以在条件前添加初始化语句

准备好学习switch语句了吗?让我们进入下一章!

最后更新:2026-03-26