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