当所有通道都关闭时突破 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中文网其他相关文章!