首页 > golang select 和 break 的用法问题

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
        }
    }
}

跳出大代码块,所以不会死循环。比如下面代码

package main
import "fmt"
func main() {
    DONE:
    for{
        break DONE
    }
    fmt.Println("Hello world")
}

输出hello world

【热门文章】
【热门文章】