Go语言条件语句
本文最后更新于 2024-10-09,文章内容可能已经过时。
Go语言条件语句
Go语言提供了一些条件语句来实现不同的条件分支和决策逻辑。以下是Go语言中常用的条件语句:
1. if
语句:
if
语句用于执行一个代码块,如果给定的条件为真(true)。if condition { // 如果条件为真,执行这里的代码 }
示例:
age := 18 if age >= 18 { fmt.Println("成年人") } else { fmt.Println("未成年人") }
2. if-else
语句:
if-else
语句用于执行一个代码块,如果条件为真,则执行一个代码块,如果条件为假,则执行另一个代码块。if condition { // 如果条件为真,执行这里的代码 } else { // 如果条件为假,执行这里的代码 }
3. if-else if-else
语句:
if-else if-else
语句用于执行多个条件的判断,只有第一个为真的条件对应的代码块会被执行。if condition1 { // 如果条件1为真,执行这里的代码 } else if condition2 { // 如果条件2为真,执行这里的代码 } else { // 如果条件1和条件2都为假,执行这里的代码 }
4. switch
语句:
switch
语句用于执行多个不同条件的分支,根据条件的匹配执行相应的代码块。switch expression { case value1: // 当表达式等于value1时,执行这里的代码 case value2: // 当表达式等于value2时,执行这里的代码 default: // 如果没有匹配的条件,执行这里的代码 }
示例:
day := "Wednesday" switch day { case "Monday": fmt.Println("星期一") case "Tuesday": fmt.Println("星期二") case "Wednesday": fmt.Println("星期三") default: fmt.Println("其他天") }
Go语言的条件语句非常灵活,可以根据不同的条件和需求来选择适当的条件语句来实现代码的逻辑控制。这些条件语句使程序能够根据不同的条件执行不同的代码块。
5.select
语句
select
语句是Go语言中用于处理通道通信和多路复用的关键语句。select
语句允许您同时等待多个通道操作,并在其中一个操作准备就绪时执行相应的代码块。这使得在并发编程中可以更有效地处理多个通道操作,如读取、写入、超时等。
select
语句的一般语法如下:
select {
case channelOperation1:
// 处理通道操作1
case channelOperation2:
// 处理通道操作2
// 可以有更多的case
default:
// 如果没有通道操作准备就绪,执行这里的代码
}
在 select
语句中,您可以列出多个 case
语句,每个 case
语句都是一个通道操作(读取或写入)。当 select
语句执行时,它会等待这些通道操作中的任何一个准备就绪。一旦有通道操作准备就绪,相应的 case
代码块将被执行。如果没有通道操作准备就绪,那么可以选择执行 default
语句中的代码块(如果存在)。
以下是一些 select
语句的常见用法示例:
- 使用
select
语句处理通道读取和写入:
ch1 := make(chan int)
ch2 := make(chan int)
go func() {
ch1 <- 42
}()
go func() {
ch2 <- 99
}()
select {
case val := <-ch1:
fmt.Printf("从ch1读取到:%d\n", val)
case val := <-ch2:
fmt.Printf("从ch2读取到:%d\n", val)
}
- 使用
select
语句处理通道超时:
ch := make(chan string)
timeout := time.After(2 * time.Second)
select {
case msg := <-ch:
fmt.Println("接收到消息:", msg)
case <-timeout:
fmt.Println("超时")
}
- 使用
select
语句实现非阻塞通道操作:
ch := make(chan int, 1)
// 如果通道操作不会阻塞,就执行
select {
case ch <- 42:
fmt.Println("发送成功")
default:
fmt.Println("通道已满,发送失败")
}
select
语句是Go语言中处理并发编程任务的重要工具,它允许您以非常灵活的方式等待多个通道操作,并根据操作的完成情况执行相应的代码块。这对于编写高效且响应迅速的并发程序非常有用。
注意:Go 没有三目运算符,所以不支持 ?: 形式的条件判断。