日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Golang make chan 第二个参数(size)

發布時間:2025/3/15 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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: 0

size=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: 0

size=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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。