1. 程式人生 > >Go channel 基本語法

Go channel 基本語法

channel的基本語法比較簡單, 一般的宣告格式是:

定義格式如下:

1 ch := make(chan int)

還有一個最常用的就是寫入和讀出,當你向channel寫入資料時會導致程式阻塞,直到有其他goroutine從這個channel中讀取資料,
同理如果channel之前沒有寫入過資料,那麼從channel中讀取資料也會導致程式阻塞,直到這個channel中被寫入了資料為止

1 ch <- value    //寫入
2 value := <-ch  //讀取

關閉channel

close(ch)

判斷channel是否關閉(利用多返回值的方式):

1 b, status := <-ch

帶緩衝的channel
說起來也容易,之前我們使用的都是不帶緩衝的channel,這種方法適用於單個數據的情況,對於大量的資料不太實用,在呼叫make()的時候將緩衝區大小作為第二個引數傳入就可以建立緩衝的channel,即使沒有讀取方,寫入方也可以一直往channel裡寫入,在緩衝區被填完之前都不會阻塞。

c := make(chan int, 1024)

單項channel
單向channel只能用於寫入或者讀取資料。
channel本身必然是同時支援讀寫的,否則根本沒法用。所謂的單向channel概念,其實只是對channel的一種使用限制。
單向channel變數的宣告:

1 var ch1 chan int   // ch1是一個正常的channel
2 var ch2 <-chan int // ch2是單向channel,只用於讀取int資料

單項channel的初始化

1 ch3 := make(chan int)
2 ch4 := <-chan int(ch3) // ch4是一個單向的讀取channel