如果在select語句內的恰當時刻沒有捕獲到通過golang中的頻道進入的數據是否可能被忽略?來自不同通道的數據是否會被忽略?
例如,讓我們說有此select語句:
for {
select {
case <-timer.C:
//block A
default:
// block B takes 2 seconds.
}
}
如果計時器在塊B運行結束,並阻止一個仍然在循環的下一次迭代運行或不信道的輸入數據得到丟失?
在發送端,如果它是帶有空間的緩衝通道,則數據被緩衝。否則,它取決於寫入程序是否阻塞,以及它是否在重試或繼續並丟棄數據時不阻塞。另一種放棄/忽略數據的方式是讓讀者在沒有閱讀緩衝項目的情況下退出。 –