go語言——channel特點
阿新 • • 發佈:2020-08-24
知識點
通道擁有阻塞機制(無緩衝區),有緩衝區同理。
接收端在傳送端資料傳送完成之前(通道為nil),處於阻塞狀態
傳送端在接收端資料拿走完成之前(通道為滿),處於阻塞態
注意點
1.struct{}型別不佔空間,作為通道的一種訊號方式
2.chan型別為引用型別,故需要進行初始化,申請空間,在通道使用結束後Close()關閉
3.nil狀態不可以進行資料通訊
4.避免在接收端關閉通道,因為不知道傳送端是否再發資料,儘量傳送端關閉,接收端判斷。
5.形參為單通道型別,實參為雙通道型別會預設根據形參型別進行自動轉換;不能利用函式宣告把單向通道轉換成雙向通道
6.單通道型別:<-ch :表示只讀通道;ch<-:表示只寫通道
使用例項
1.利用通道傳送一個空結構型別(struct{})實現goroutine的同步機制
var ch chan struct{} func test() { fmt.Println("test begin ,waitting 1 second...") time.Sleep(time.Second) fmt.Println("test end") ch <- struct{}{} } func main() { ch = make(chan struct{}, 1) fmt.Println("main begin") go test()<-ch fmt.Println("main end") }