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
        }
    }
}
阅读 11.1k
1 个回答

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

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

输出hello world

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏