1. 程式人生 > >golang 之 channel

golang 之 channel

microsoft 沒有 而已 創建 無緩沖 eight 不能 否則 false

channel的機制是先進先出

無緩沖的channel: 如果你給channel賦值了,那麽必須要讀取它的值,不然就會造成阻塞。

chreadandwrite :=make(chan int)

chonlyread := make(<-chan int) //創建只讀channel 
chonlywrite := make(chan<- int) //創建只寫channel 

有緩沖的channel: 發送方會一直阻塞直到數據被拷貝到緩沖區;

如果緩沖區已滿,則發送方只能在接收方取走數據後才能從阻塞狀態恢復。

 ch :=make(chan int,1)

  

  • 關於Channel的心得【摘抄】
  1. 首先,永遠是符號<-進行讀取或者寫入,譬如v,ok := <-c是讀取,而c <- v是寫入。
  2. 其次,讀取時,如果沒有ok,也是可以讀取的。不過如果closed也是能讀的,沒有賦值而已;如果要知道是否closed得加ok,也就是除非chan永遠不關閉,否則讀取應該用v,ok := <-c而不是用v := <-c的方式。
  3. 再次,不能向closed的chan寫入,所以一般寫入時需要用一個信號的chan(一般buffer為1),來判斷是否寫入或者放棄,用select判斷是寫入成功了,還是正在關閉需要放棄寫入。
  4. 最後,如果closed後,chan有數據,ok還是true的,直到chan沒有數據了才false。

golang 之 channel