Golang make chan 第二个参数(size)
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                Golang make chan 第二个参数(size)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                說明
func make(t Type, size ...IntegerType) Type指出該值在同一時刻最多可以容納 size 個元素值。
如果我們發送給該通道的元素值未被取走,那么該通道最多可以暫存(或者說緩沖)size 個元素值。
當發送第size +1個元素值后, 會造成當前Goroutine的堵塞(在chan<-時會卡住,等chan有空間時才可以<-并且進行后面的代碼)
示例
代碼
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修改為不同值, 會有不同的輸出效果
無size 或 size=0 時的輸出結果
第一次c1<-時, 由于沒有立刻被取走func就會堵塞住,等3秒后c1被讀取才進行后面的代碼
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時的輸出結果
第二次c1<-時,由于第一個沒有取走, 會堵塞
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時的輸出結果
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?
總結
以上是生活随笔為你收集整理的Golang make chan 第二个参数(size)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: C/C++的ide编译器CLion的安装
- 下一篇: Linux PWN从入门到熟练
