1. 程式人生 > 其它 >select多路複用

select多路複用

1、select的使用方法

Select 的使用方式類似於之前學到的 switch 語句,它也有一系列 case 分支和一個預設的分支。每個 case 分支會對應一個通道的通訊(接收或傳送)過程。select 會一直等待,直到其中的某個 case 的通訊操作完成時,就會執行該 case 分支對應的語句。具體格式如下:

select {
case <-ch1:
	//...
case data := <-ch2:
	//...
case ch3 <- 10:
	//...
default:
	//預設操作
}

2、Select的特點

Select 語句具有以下特點。

  • 可處理一個或多個 channel 的傳送/接收操作。
  • 如果多個 case 同時滿足,select 會隨機選擇一個執行。
  • 對於沒有 case 的 select 會一直阻塞,可用於阻塞 main 函式,防止退出。
package main

import "fmt"

func main() {
	ch := make(chan int, 1)
	for i := 1; i <= 10; i++ {
		select {
		case x := <-ch:
			fmt.Println(x)
		case ch <- i:
		}
	}
}

  參考:Go語言基礎之併發 | 李文周的部落格 (liwenzhou.com)