Go 语言条件语句(Conditional Statements)详解
在 Go 语言中,条件语句用于控制程序的执行流程,常见的条件语句有:
if语句if...else语句if...else if...else语句switch语句select语句(用于goroutine和channel)
1. if 语句
if 语句用于判断某个条件是否为 true,如果为 true,则执行代码块。
1.1 基本语法
if 条件 {
// 代码块
}
1.2 示例
package main
import "fmt"
func main() {
age := 20
if age >= 18 {
fmt.Println("成年人")
}
}
输出:
成年人
2. if…else 语句
if...else 语句用于在条件为 false 时执行另一个代码块。
2.1 语法
if 条件 {
// 条件为 true 执行
} else {
// 条件为 false 执行
}
2.2 示例
package main
import "fmt"
func main() {
num := 10
if num%2 == 0 {
fmt.Println("偶数")
} else {
fmt.Println("奇数")
}
}
输出:
偶数
3. if…else if…else 语句
if...else if...else 语句适用于多个条件分支的情况。
3.1 语法
if 条件1 {
// 条件1为 true 执行
} else if 条件2 {
// 条件2为 true 执行
} else {
// 以上条件都不满足执行
}
3.2 示例
package main
import "fmt"
func main() {
score := 85
if score >= 90 {
fmt.Println("优秀")
} else if score >= 75 {
fmt.Println("良好")
} else if score >= 60 {
fmt.Println("及格")
} else {
fmt.Println("不及格")
}
}
输出:
良好
4. if 语句的简短变量声明
在 if 语句中,可以使用 := 进行简短变量声明,这种变量仅在 if 代码块内有效。
4.1 语法
if 变量 := 表达式; 条件 {
// 代码块
}
4.2 示例
package main
import "fmt"
func main() {
if num := 10; num%2 == 0 {
fmt.Println(num, "是偶数")
} else {
fmt.Println(num, "是奇数")
}
}
输出:
10 是偶数
注意: num 变量仅在 if 语句作用域内有效,无法在 if 语句外部使用。
5. switch 语句
switch 语句是一种多分支结构,类似 if...else if...else,但更简洁。
5.1 语法
switch 表达式 {
case 值1:
// 代码块
case 值2:
// 代码块
default:
// 代码块
}
5.2 示例
package main
import "fmt"
func main() {
day := 3
switch day {
case 1:
fmt.Println("星期一")
case 2:
fmt.Println("星期二")
case 3:
fmt.Println("星期三")
default:
fmt.Println("未知日期")
}
}
输出:
星期三
5.3 switch 语句的多条件匹配
package main
import "fmt"
func main() {
score := 85
switch {
case score >= 90:
fmt.Println("优秀")
case score >= 75:
fmt.Println("良好")
case score >= 60:
fmt.Println("及格")
default:
fmt.Println("不及格")
}
}
输出:
良好
特点:
switch语句后不需要指定表达式,直接在case语句中使用条件判断。
6. switch 语句的 fallthrough
默认情况下,switch 在匹配 case 后不会继续执行后续 case,但使用 fallthrough 关键字可以让 switch 继续执行下一个 case 代码块。
package main
import "fmt"
func main() {
num := 2
switch num {
case 1:
fmt.Println("一")
case 2:
fmt.Println("二")
fallthrough
case 3:
fmt.Println("三")
default:
fmt.Println("其他")
}
}
输出:
二
三
注意: fallthrough 不会判断下一个 case 是否匹配,直接执行下一 case。
7. select 语句(用于 channel)
select 语句用于监听多个 channel,当其中一个 channel 可用时执行相应的 case 代码块。
7.1 语法
select {
case <-channel1:
// 当 channel1 可读时执行
case <-channel2:
// 当 channel2 可读时执行
default:
// 如果所有 channel 都不可读,则执行
}
7.2 示例
package main
import (
"fmt"
"time"
)
func main() {
ch1 := make(chan string, 1)
ch2 := make(chan string, 1)
ch1 <- "数据1"
select {
case msg := <-ch1:
fmt.Println("接收:", msg)
case msg := <-ch2:
fmt.Println("接收:", msg)
default:
fmt.Println("没有数据")
}
}
输出:
接收: 数据1
8. 总结
| 语句 | 用途 |
|---|---|
if | 仅执行单个条件判断 |
if...else | 两个条件分支 |
if...else if...else | 多个条件分支 |
switch | 替代 if...else if...else,更简洁 |
switch + fallthrough | 强制执行下一个 case |
select | 用于 channel 处理并发 |