2 回答

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個贊
這是每個規(guī)范的預(yù)期行為:接收運(yùn)算符:
關(guān)閉通道上的接收操作始終可以立即進(jìn)行,在收到任何先前發(fā)送的值后生成元素類型的零值。
如果您想在從通道接收到所有值(在關(guān)閉之前在通道上發(fā)送的值)后終止循環(huán),請使用該for ... range
構(gòu)造,例如:
c?:=?make(chan?int)?//?Initialize?some?channel for?v?:=?range?c?{ ????fmt.Println("Received:",?v) }
如果您有多個通道并且希望從所有通道接收數(shù)據(jù),則可以使用多個 goroutine,每個 goroutine 都有一個for range
指定的通道。
另一個解決方案是:
函數(shù)可以從多個輸入中讀取數(shù)據(jù),并通過將輸入通道復(fù)用到單個通道上來繼續(xù)執(zhí)行,直到所有輸入都關(guān)閉,該通道在所有輸入都關(guān)閉時關(guān)閉。這稱為扇入。

TA貢獻(xiàn)1111條經(jīng)驗(yàn) 獲得超0個贊
Go 編程語言規(guī)范
關(guān)閉
調(diào)用 close 后,并且接收到任何先前發(fā)送的值后,接收操作將返回通道類型的零值,而不會阻塞。
接收操作員
關(guān)閉通道上的接收操作始終可以立即進(jìn)行,在收到任何先前發(fā)送的值后生成元素類型的零值。
- 2 回答
- 0 關(guān)注
- 173 瀏覽
添加回答
舉報