3 回答

TA貢獻1865條經驗 獲得超7個贊
您還可以通過使用len來窺視通道緩沖區以查看其是否包含任何內容:
if len(channel) > 0 {
// has data to receive
}
這不會觸摸通道緩沖區,與之不同的是foo, gotValue := <- ch,該緩沖區會在時刪除一個值gotValue == true。

TA貢獻1831條經驗 獲得超9個贊
Select語句使您可以一次隨機檢查分支(在等待通信的分支中),以檢查多個通道:
func main () {
for {
select {
case w := <- workchan:
go do_work(w)
case <- signalchan:
return
// default works here if no communication is available
default:
// do idle work
}
}
}
對于“ select”語句中的所有發送和接收表達式,將按從上到下的順序對通道表達式以及出現在發送表達式右側的所有表達式進行評估。如果可以進行任何結果操作,則選擇一個并評估相應的通信和語句。否則,如果存在默認情況,則執行;否則,將執行默認情況。如果不是,則語句將阻塞,直到其中一種通信可以完成。
- 3 回答
- 0 關注
- 286 瀏覽
添加回答
舉報