當所有通道都關閉時突破Select 語句
問題:
如何您能否有效地循環多個透過通道產生資料的獨立goroutine,直到所有通道關閉並在通道耗盡其輸出時停止消耗?
答案:
使用 select語句通常會消耗來自多個通道的數據,但確定所有通道何時關閉可能具有挑戰性。這裡有一個簡潔的方法來處理這個問題:
for { select { case p, ok := <-mins: if !ok { // channel is closed mins = nil // set channel to nil } else { fmt.Println("Min:", p) } case p, ok := <-maxs: if !ok { maxs = nil } else { fmt.Println("Max:", p) } } if mins == nil && maxs == nil { break // exit loop when all channels are nil } }
這裡的技巧是將關閉的通道設定為 nil 以避免進一步選擇它。這可確保 select 語句持續運作並檢查剩餘的開啟通道。
優點:
以上是當所有通道都關閉時如何跳出 select 語句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!