2 回答

TA貢獻1829條經(jīng)驗 獲得超9個贊
你認為為什么會發(fā)生這種情況?通道應充當發(fā)送方和接收方之間的同步原語。您有一個發(fā)件人在頻道上發(fā)送,但沒有一個在頻道上接收。如果沒有接收戈魯丁或對戈魯丁的接收操作,發(fā)送方只需阻止(作為無緩沖通道)case1
case2
dogChan
在 上出現(xiàn)同樣的問題,您在信道上有兩個發(fā)送,但在戈魯廷上有一個接收。將永遠阻止。在 中,如果您打算從通道中讀取,只需使用循環(huán)來迭代通過通道發(fā)送的連續(xù)值。case4
dogChan <- 2
case5
range

TA貢獻1744條經(jīng)驗 獲得超4個贊
Golang 希望程序讀取放入頻道的消息。
使用者(讀取器)需要從通道中抽?。ㄗx?。┧邢ⅲ瑹o論是使用簡單的供讀還是供選擇。通道發(fā)送和接收都阻塞,直到發(fā)送方和接收方準備就緒。
案例 1, 案例 2 = 向通道發(fā)送一條消息,阻止等待讀取器,讀取零條消息
case4 = 向通道發(fā)送一條消息,阻止等待讀取器,讀取器不消耗(讀?。┫?/p>
case3 = 將一條消息發(fā)送到通道,從通道消耗一條消息,發(fā)送方阻止等待讀取器
case5 = 向通道發(fā)送五條消息,消耗所有 (五) 條消息,每個發(fā)送塊直到讀取器接收
// for range over channel
for msg := range ch {
// process msg
}
// for select
done := false
for !done {
select {
case msg := <-ch: {
// process msg
}
case ch == nil: {
done = true
}
}
}
// producer should close channel
close(ch)
注意:
通道可以緩沖,指定通道(隊列)大小
通道大小默認值 = 1(無緩沖),通道滿時寫入器塊
- 2 回答
- 0 關注
- 102 瀏覽
添加回答
舉報