1. 程式人生 > 實用技巧 >go語言——channel特點

go語言——channel特點

知識點

通道擁有阻塞機制(無緩衝區),有緩衝區同理。

  接收端在傳送端資料傳送完成之前(通道為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") }