當(dāng)前位置:
首頁(yè) >
Golang make chan 第二个参数(size)
發(fā)布時(shí)間:2025/3/15
47
豆豆
生活随笔
收集整理的這篇文章主要介紹了
Golang make chan 第二个参数(size)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
說(shuō)明
func make(t Type, size ...IntegerType) Type指出該值在同一時(shí)刻最多可以容納 size 個(gè)元素值。
如果我們發(fā)送給該通道的元素值未被取走,那么該通道最多可以暫存(或者說(shuō)緩沖)size 個(gè)元素值。
當(dāng)發(fā)送第size +1個(gè)元素值后, 會(huì)造成當(dāng)前Goroutine的堵塞(在chan<-時(shí)會(huì)卡住,等chan有空間時(shí)才可以<-并且進(jìn)行后面的代碼)
示例
代碼
func HelloMakeChanSize() {size := 0c1 := make(chan int, size)go func() {for i := 0; i < 4; i++ {val := i*10 + 7fmt.Println(time.Now(), "<- ", val, "at", i)c1 <- i*10 + 7}c1 <- 0}()time.Sleep(time.Second * 3)fmt.Println("After Sleep")for val := range c1 {fmt.Println(time.Now(), "receive:", val)if val == 0 {break}} }c1 := make(chan int,size)?中的size修改為不同值, 會(huì)有不同的輸出效果
無(wú)size 或 size=0 時(shí)的輸出結(jié)果
第一次c1<-時(shí), 由于沒(méi)有立刻被取走func就會(huì)堵塞住,等3秒后c1被讀取才進(jìn)行后面的代碼
2019-05-17 14:57:29.2314327 +0800 CST m=+0.003910401 <- 7 at 0 After Sleep 2019-05-17 14:57:32.2321627 +0800 CST m=+3.004754901 receive: 7 2019-05-17 14:57:32.2321627 +0800 CST m=+3.004754901 <- 17 at 1 2019-05-17 14:57:32.2321627 +0800 CST m=+3.004754901 <- 27 at 2 2019-05-17 14:57:32.2321627 +0800 CST m=+3.004754901 receive: 17 2019-05-17 14:57:32.2321627 +0800 CST m=+3.004754901 receive: 27 2019-05-17 14:57:32.2321627 +0800 CST m=+3.004754901 <- 37 at 3 2019-05-17 14:57:32.2321627 +0800 CST m=+3.004754901 receive: 37 2019-05-17 14:57:32.2321627 +0800 CST m=+3.004754901 receive: 0size=1時(shí)的輸出結(jié)果
第二次c1<-時(shí),由于第一個(gè)沒(méi)有取走, 會(huì)堵塞
2019-05-17 14:57:57.7795593 +0800 CST m=+0.004894501 <- 7 at 0 2019-05-17 14:57:57.819622 +0800 CST m=+0.044958701 <- 17 at 1 After Sleep 2019-05-17 14:58:00.7799573 +0800 CST m=+3.005407001 receive: 7 2019-05-17 14:58:00.7799573 +0800 CST m=+3.005407001 receive: 17 2019-05-17 14:58:00.7799573 +0800 CST m=+3.005407001 <- 27 at 2 2019-05-17 14:58:00.7799573 +0800 CST m=+3.005407001 <- 37 at 3 2019-05-17 14:58:00.7799573 +0800 CST m=+3.005407001 receive: 27 2019-05-17 14:58:00.7799573 +0800 CST m=+3.005407001 receive: 37 2019-05-17 14:58:00.7799573 +0800 CST m=+3.005407001 receive: 0size=3時(shí)的輸出結(jié)果
2019-05-17 14:58:24.7116812 +0800 CST m=+0.004888401 <- 7 at 0 2019-05-17 14:58:24.7449182 +0800 CST m=+0.038126701 <- 17 at 1 2019-05-17 14:58:24.7449182 +0800 CST m=+0.038126701 <- 27 at 2 2019-05-17 14:58:24.7449182 +0800 CST m=+0.038126701 <- 37 at 3 After Sleep 2019-05-17 14:58:27.7108697 +0800 CST m=+3.004191401 receive: 7 2019-05-17 14:58:27.7108697 +0800 CST m=+3.004191401 receive: 17 2019-05-17 14:58:27.7108697 +0800 CST m=+3.004191401 receive: 27 2019-05-17 14:58:27.7108697 +0800 CST m=+3.004191401 receive: 37 2019-05-17 14:58:27.7108697 +0800 CST m=+3.004191401 receive: 0?
總結(jié)
以上是生活随笔為你收集整理的Golang make chan 第二个参数(size)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C/C++的ide编译器CLion的安装
- 下一篇: E: Sub-process /usr/