在程序中,我们常常需要依据不同的条件执行不同的代码逻辑。Go 提供了两种主要的条件语句:if 和 switch,结构清晰、功能强大。
一、if 语句
1. 基本语法
if 条件表达式 { // 条件为 true 时执行的代码 }
2. 带 else 的写法
if x > 10 { fmt.Println("x 大于 10") } else { fmt.Println("x 小于或等于 10") }
3. 多分支:else if
if x > 100 { fmt.Println("x > 100") } else if x > 50 { fmt.Println("50 < x <= 100") } else { fmt.Println("x <= 50") }
4. 支持初始化语句
if y := getValue(); y > 10 { fmt.Println("y 大于 10") }
y仅在if语句的作用域内可用。
二、switch 语句
1. 基本语法
switch 变量 { case 值1: // 执行代码1 case 值2: // 执行代码2 default: // 所有 case 不匹配时执行 }
示例:
day := "Monday" switch day { case "Monday": fmt.Println("今天是周一") case "Friday": fmt.Println("今天是周五") default: fmt.Println("不是周一也不是周五") }
2. 一个 case 匹配多个值
switch time.Now().Weekday() { case time.Saturday, time.Sunday: fmt.Println("周末休息") default: fmt.Println("工作日") }
3. 不加表达式,使用逻辑判断
score := 85 switch { case score >= 90: fmt.Println("优秀") case score >= 60: fmt.Println("及格") default: fmt.Println("不及格") }
4. 支持 fallthrough 强制进入下一分支(默认不会自动贯穿)
i := 2 switch i { case 1: fmt.Println("One") fallthrough case 2: fmt.Println("Two") // 会被执行 }
三、if 与 switch 的选择建议
| 情况 | 推荐语句 |
| 单一条件判断 | if |
| 多条件、枚举类型匹配 | switch |
| 多值匹配或逻辑清晰分支 | switch |
| 简单判断+临时变量声明 | if(带初始化) |
四、小结
- •
if更灵活、适合少量条件; - •
switch更结构化,适合多分支判断; - • 支持在条件语句中声明局部变量;
- •
switch默认不贯穿,用fallthrough显式声明。