Go语言提供了多种条件判断语句,用于控制程序的执行流程。本文将详细介绍Go中的条件判断语句,包括if、if..else、if嵌套、switch和select语句
1. if 判断语句
if语句是Go中最基本的条件判断结构,当条件为true时执行代码块
语法结构
go
if 条件 {
// 条件为 true 时执行的代码
}
示例代码
go
func first() {
a := 15
if a < 20 {
fmt.Println("15 是小于 20 的")
}
}
输出: 15 是小于 20 的
2. if...else 判断语句
当需要在条件为false时执行其他代码,可以使用if..else语句
语法结构
go
if 条件 {
// 条件为 true 时执行的代码
} else {
// 条件为 false 时执行的代码
}
示例代码
go
func second() {
a := 15
if a > 20 {
fmt.Println("15 是大于 20 的")
} else {
fmt.Println("15 是小于 20 的")
}
}
输出: 15 是小于 20 的
3. if 嵌套语句
在if语句内部可以再嵌套if语句,用于处理更复杂的条件判断
示例代码
go
func third() {
a := 10
b := 20
if a == 10 {
fmt.Println("a = 10")
if b == 20 {
fmt.Println("b = 20")
}
}
}
输出:
a = 10
b = 20
4. switch 语句
switch语句用于基于不同条件执行不同动作,比多个if..else更加清晰
语法特点
switch会从第一个case开始匹配,找到匹配项后执行相应代码- 可以使用
fallthrough关键字强制执行后续的case语句 fallthrough不会判断下一条case的表达式结果是否为true
示例代码
go
func fourth() {
grades := 90
var level string
switch grades {
case 90:
level = "A"
case 80:
level = "B"
case 70:
level = "C"
case 60:
level = "D"
default:
level = "F"
}
switch {
case level == "A":
fmt.Println("等级为优秀")
case level == "B":
fmt.Println("等级为良好")
case level == "C":
fmt.Println("等级为中等")
case level == "D":
fmt.Println("等级为普通")
default:
fmt.Println("等级为差")
}
}
输出: 等级为优秀
5. select 语句
select语句是专门为通道(channel)设计的,用于处理通道操作。它会等待直到某个case中的通道操作可以执行
语法特点
select会监听所有case中的通道操作- 当多个通道同时准备好时,会随机选择一个执行
- 如果所有通道都没有准备好,会执行
default分支 default分支通常是可选的,用于避免阻塞
示例代码
go
func fifth() {
// 创建三个通道
a := make(chan int)
b := make(chan int)
c := make(chan int)
// select 监听多个通道操作
select {
case <-a: // 从通道 a 接收数据
fmt.Println("从 a 收到数据")
case <-b: // 从通道 b 接收数据
fmt.Println("从 b 收到数据")
case <-c: // 从通道 c 接收数据
fmt.Println("从 c 收到数据")
default:
fmt.Println("所有通道都没有准备好")
}
}
输出: 所有通道都没有准备好
总结
| 语句类型 | 适用场景 | 特点 |
|---|---|---|
if |
单条件判断 | 简单直接 |
if..else |
双分支判断 | 覆盖真假两种情况 |
if嵌套 |
多级条件判断 | 可处理复杂逻辑 |
switch |
多分支判断 | 代码清晰易读 |
select |
通道操作监听 | Go特有,用于并发编程 |
运行完整示例
要运行本文中的所有示例,可以使用以下main函数:
go
package main
import "fmt"
func main() {
fmt.Println("----if判断语句----")
first()
fmt.Println("----if..else判断语句----")
second()
fmt.Println("----if嵌套语句----")
third()
fmt.Println("----switch语句----")
fourth()
fmt.Println("----select语句----")
fifth()
}
func first() {
a := 15
if a < 20 {
fmt.Println("15 是小于 20 的")
}
}
func second() {
a := 15
if a > 20 {
fmt.Println("15 是大于 20 的")
} else {
fmt.Println("15 是小于 20 的")
}
}
func third() {
a := 10
b := 20
if a == 10 {
fmt.Println("a = 10")
if b == 20 {
fmt.Println("b = 20")
}
}
}
func fourth() {
// 使用 fallthrough 会强制执行后面的 case 语句,fallthrough 不会判断下一条 case 的表达式结果是否为 true
// 可以尝试使用,这里不展示了
grades := 90
var level string
switch grades {
case 90:
level = "A"
case 80:
level = "B"
case 70:
level = "C"
case 60:
level = "D"
default:
level = "F"
}
switch {
case level == "A":
fmt.Println("等级为优秀")
case level == "B":
fmt.Println("等级为良好")
case level == "C":
fmt.Println("等级为中等")
case level == "D":
fmt.Println("等级为普通")
default:
fmt.Println("等级为差")
}
}
func fifth() {
// 假设 a, b, c 是通道
a := make(chan int) // channel 缩写 chan 通道
b := make(chan int) // 这里创建了 3 个通道
c := make(chan int)
// select 是专门为通道设计的,它的唯一用途就是处理通道操作
select {
case <-a: // 从通道接收数据
fmt.Println("从 a 收到数据")
case <-b:
fmt.Println("从 b 收到数据")
case <-c:
fmt.Println("从 c 收到数据")
default:
fmt.Println("所有通道都没有准备好")
}
}
Go语言的这些条件判断语句为开发者提供了灵活的控制流选项,可以根据不同场景选择最合适的语句来编写清晰、高效的代码