Go 语言程序实现 select 语句
Go 语言的 select 语句类似于 switch 语句,switch 语句根据 case 选择输出,但在这里,输出是根据哪个通道的通信最快来选择的。
语法
func make ([] type, size, capacity)
Go 语言中的 make 函数用于创建数组/映射,它接受要创建的变量类型、大小和容量作为参数。
time.Sleep()
此函数属于 time 包。这里,sleep 这个词描述了函数的含义,即它将阻塞 goroutine 的执行一段时间。
time.Second()
此函数是 time 包的一部分,主要用于表示秒数的持续时间。
算法
步骤 1 - 在程序中导入所需的包
步骤 2 - 创建一个 main 函数,并在 main 函数中使用内置函数创建两个通道
步骤 3 - 使用 go 协程将数据发送到通道,并在 select 语句退出之前使用 sleep 接收消息
步骤 4 - 使用 select 语句从首先接收到数据的通道获取控制台输出
步骤 5 - 使用 fmt 包中的 Println 函数执行打印语句
示例 1
在这个例子中,我们将通过创建两个通道并使用 go 协程将数据发送到通道来实现 select 语句。select 语句将用于接收来自通道的数据,并打印首先接收到的数据到控制台。
package main
import (
"fmt"
"time"
)
func main() {
channel1 := make(chan string)
channel2 := make(chan string)
go func() {
time.Sleep(2 * time.Second)
channel1 <- "good"
}()
go func() {
time.Sleep(3 * time.Second)
channel2 <- "morning"
}()
select {
case msg1 := <-channel1:
fmt.Println(msg1)
case msg2 := <-channel2:
fmt.Println(msg2)
}
}
输出
good
示例 2
在这个示例中,将创建两个通道。go 协程将用于将数据发送到通道,然后使用 select 语句获取输出作为从通道接收到的数据,但如果未收到任何消息,这里也将使用默认值。
package main
import (
"fmt"
"time"
)
func main() {
channel1 := make(chan string)
channel2 := make(chan string)
go func() {
time.Sleep(2 * time.Second)
channel1 <- "good"
}()
go func() {
time.Sleep(3 * time.Second)
channel2 <- "morning"
}()
select {
case msg1 := <-channel1:
fmt.Println(msg1)
case msg2 := <-channel2:
fmt.Println(msg2)
default:
fmt.Println("No messages received")
}
}
输出
No messages received
结论
我们使用两个示例编译并执行了实现 select 语句的程序。在这两个示例中,我们使用了相似的通道,但唯一使它们不同的因素是在第二个示例中,如果从通道未收到任何消息,则使用了默认值。
广告
数据结构
网络
关系型数据库
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP