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