清華尹成帶你實戰GO案例(59)Go 通道選擇Select

尹成發表於2018-05-22
Go 通道選擇Select
Go的select關鍵字可以讓你同時等待多個通道操作,將協程(goroutine),通道(channel)和select結
合起來構成了Go的一個強大特性。
package main
import "time"
import "fmt"
func main() {
// 本例中,我們從兩個通道中選擇
c1 := make(chan string)
c2 := make(chan string)
// 為了模擬並行協程的阻塞操作,我們讓每個通道在一段時間後再寫入一個值
go func() {
time.Sleep(time.Second * 1)
c1 <- "one"
}()
go func() {
time.Sleep(time.Second * 2)
c2 <- "two"
}()
// 我們使用select來等待這兩個通道的值,然後輸出
for i := 0; i < 2; i++ {
select {
case msg1 := <-c1:
fmt.Println("received", msg1)
case msg2 := <-c2:
fmt.Println("received", msg2)
}
}
}


輸出結果
received one
received two
如我們所期望的,程式輸出了正確的值。對於select語句而言,它不斷地檢測通道是否有值過來,一旦發

現有值過來,立刻獲取輸出。





網址:http://www.qukuailianxueyuan.io/



欲領取造幣技術與全套虛擬機器資料

區塊鏈技術交流QQ群:756146052  備註:CSDN

尹成學院微信:備註:CSDN



網址:http://www.qukuailianxueyuan.io/



欲領取造幣技術與全套虛擬機器資料

區塊鏈技術交流QQ群:756146052  備註:CSDN

尹成學院微信:備註:CSDN

相關文章