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 语句的程序。在这两个示例中,我们使用了相似的通道,但唯一使它们不同的因素是在第二个示例中,如果从通道未收到任何消息,则使用了默认值。

更新于: 2023年4月4日

255 次查看

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告
© . All rights reserved.