Golang实现select语句的程序
Golang的Select语句类似于Switch语句,Switch语句根据情况选择输出,但在这里,根据通道中通讯的速度选择输出。
语法
func make ([] type, size, capacity)
Golang中的 make 函数用于创建数组/映射,它接受要创建的变量类型、大小和容量作为参数。
time.Sleep()
此函数属于时间包。在这里,”sleep”代表函数的含义,表示它将阻塞goroutine执行一定的时间。
time.Second()
这个函数是时间包的一部分,它主要用于表示秒的持续时间。
算法
- 步骤1 - 在程序中导入所需的包
-
步骤2 - 创建一个main函数,在其中使用内置函数创建两个通道
-
步骤3 - 使用go routine向通道发送数据,使用sleep在select语句退出之前接收消息
-
步骤4 - 使用select语句从接收消息的任何通道获取输出到控制台
-
步骤5 - 使用fmt包的Println函数执行打印语句
示例1
在这个例子中,我们将通过创建两个通道并使用go routines将数据发送到通道来实现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 <- "好"
}()
go func() {
time.Sleep(3 * time.Second)
channel2 <- "早上好"
}()
select {
case msg1 := <-channel1:
fmt.Println(msg1)
case msg2 := <-channel2:
fmt.Println(msg2)
}
}
输出
好
示例2
在这个示例中,将创建两个通道。用go routines将数据发送到通道,然后使用select语句从通道接收输出作为收到的数据。但在这里,如果没有接收到消息,也将用默认语句。
package main
import (
"fmt"
"time"
)
func main() {
channel1 := make(chan string)
channel2 := make(chan string)
go func() {
time.Sleep(2 * time.Second)
channel1 <- "好"
}()
go func() {
time.Sleep(3 * time.Second)
channel2 <- "早上好"
}()
select {
case msg1 := <-channel1:
fmt.Println(msg1)
case msg2 := <-channel2:
fmt.Println(msg2)
default:
fmt.Println("没有接收到任何消息")
}
输出
没有接收到任何消息
结论
我们编译并执行了使用两个示例实现select语句的程序。在这两个示例中,我们使用了类似的通道,但使它们不同的是在第二个示例中,如果通道未接收到消息,还使用了默认语句。