golang select 和 break 的用法问题

我就想问下, 如果代码执行到 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
        }
    }
}
查看回复