我就想问下, 如果代码执行到 break DONE;位置的时候,这个函数能从 DONE:标签之后退出,还是永远的执行 select -> break DONE -> DONE: 这种循环中
func waitAndProcessResults(done <-chan struct{}, results <-chan Result) {
for working := workers; working > 0; {
select { // Blocking
case result := <-results:
fmt.Printf("%s:%d:%s\n", result.filename, result.lino, result.line)
case <-done:
working--
}
}
DONE:
for {
select { // Nonblocking
case result := <-results:
fmt.Printf("%s:%d:%s\n", result.filename, result.lino, result.line)
default:
break DONE
}
}
}
跳出大代码块,所以不会死循环。比如下面代码
输出hello world