1 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個(gè)贊
在 for 循環(huán)的每次迭代中都會(huì)創(chuàng)建一個(gè)新的兩秒計(jì)時(shí)器。關(guān)閉的頻道隨時(shí)準(zhǔn)備接收。代碼永遠(yuǎn)循環(huán),因?yàn)樵陉P(guān)閉的通道準(zhǔn)備好接收之前,新定時(shí)器的通道永遠(yuǎn)不會(huì)準(zhǔn)備好接收。
解決問題的一種方法是將通道設(shè)置為 nil:
case value, ok := <-ch:
if !ok {
ch = nil
} else {
fmt.Println(value)
}
在 nil 頻道上接收永遠(yuǎn)不會(huì)準(zhǔn)備好。
如果您希望循環(huán)最多運(yùn)行兩秒鐘,那么您應(yīng)該在循環(huán)外創(chuàng)建計(jì)時(shí)器:
after := time.After(time.Second * 2)
并在循環(huán)中選擇這個(gè)計(jì)時(shí)器:
case <-after:
fmt.Println("Return")
return
操場(chǎng)示例(添加睡眠以使示例在操場(chǎng)上運(yùn)行)
您可以將通道設(shè)置為 nil 并在循環(huán)外創(chuàng)建計(jì)時(shí)器。
- 1 回答
- 0 關(guān)注
- 177 瀏覽
添加回答
舉報(bào)