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.