Go Channel 详解
原文鏈接:Go Channel 詳解
Channel類型
Channel類型的定義格式如下:
ChannelType = ( "chan" | "chan" "<-" | "<-" "chan" ) ElementType .它包括三種類型的定義。可選的<-代表channel的方向。如果沒有指定方向,那么Channel就是雙向的,既可以接收數據,也可以發送數據。
chan T // 可以接收和發送類型為 T 的數據 chan<- float64 // 只可以用來發送 float64 類型的數據 <-chan int // 只可以用來接收 int 類型的數據<-總是優先和最左邊的類型結合。(The <- operator associates with the leftmost chan possible)
chan<- chan int // 等價 chan<- (chan int) chan<- <-chan int // 等價 chan<- (<-chan int) <-chan <-chan int // 等價 <-chan (<-chan int) chan (<-chan int)使用make初始化Channel,并且可以設置容量:
make(chan int, 100)容量(capacity)代表Channel容納的最多的元素的數量,代表Channel的緩存的大小。
如果沒有設置容量,或者容量設置為0, 說明Channel沒有緩存,只有sender和receiver都準備好了后它們的通訊(communication)才會發生(Blocking)。如果設置了緩存,就有可能不發生阻塞, 只有buffer滿了后 send才會阻塞, 而只有緩存空了后receive才會阻塞。一個nil channel不會通信。
可以通過內建的close方法可以關閉Channel。
你可以在多個goroutine從/往 一個channel 中 receive/send 數據, 不必考慮額外的同步措施。
Channel可以作為一個先入先出(FIFO)的隊列,接收的數據和發送的數據的順序是一致的。
轉載于:https://www.cnblogs.com/wangjq19920210/p/11578628.html
總結
以上是生活随笔為你收集整理的Go Channel 详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 某业务自助开通账户问题排查
- 下一篇: golang 并发demo 写入 red