golang學習筆記--channel

go中的channel

channel是類型相關的

  1. 聲明
    var channame chan chantype
  2. 定義
    ch := make(chan int)
  3. 基本操作
value := <- ch1```
當沒有設置緩沖區時,channel的讀寫都會阻塞
單向channel
```var ch2 chan<- int // ch2是單向channel,只用于寫int數據```
```var ch3 <-chan int // ch3是單向channel,只用于讀取int數據```
4. 緩沖機制
```ch := make(chan int, 1024)```
當設置緩沖區大小時,在緩沖區填滿前不會阻塞
5. 超時處理
可以利用select來實現channel的超時機制

timeout := make(chan bool, 1)
go func() {
time.sleep(1e9)
timeout <- true
}()
select{
case <-ch:
case <- timeout:
}

這樣無論ch是否接收到數據,都會達到超時的效果
6. 關閉
```close(ch)```
在一個已關閉 channel 上執行接收操作(<-ch)總是能夠立即返回,返回值是對應類型的零值。
經常利用這點來作為goroutine的停止信號

##擴展閱讀
超時操作可以用time.Ticker來做,下面可以舉一個簡單的例子

package main

import "time"

ticker := time.NewTicker(1 * time.Second)
for {
select {
case <- ticker.C:
//do something
}
}

上面的例子還要注意一點就是select是隨機決定哪個case被執行的,假如把接收數據的channel也放到這個select中,可能會造成丟包的
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容