为了账号安全,请及时绑定邮箱和手机立即绑定

选择完成后,此 FOR 循环如何中断

选择完成后,此 FOR 循环如何中断

Go
拉风的咖菲猫 2021-12-13 18:47:27
以下代码等待“结果”通道为空,然后 DEFAULT 分支中断到 Label DONE。现在的问题是:为什么这会破坏 FOR 循环?似乎 FOR 循环会继续跳到 DEFAULT 并且永远不会结束。是什么打破了 for 循环。输出如下:中断完成结束于...DONE:for {    select { // Nonblocking    case result := <-results:        fmt.Printf("%s:%d:%s\n", result.filename, result.lino,            result.line)    default:        fmt.Println("Break DONE")        break DONE    }    fmt.Println("END Select")}fmt.Println("End For")
查看完整描述

3 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

break DONEgoto DONEC 或其他语言不同。标签标记 for 循环,哪个break DONE语句在执行时将终止。它不会跳转到DONE标签,它会终止标有DONE标签的 for 循环。当您想从嵌套循环中中断或者像在您的情况下一样从 select 内部终止循环时,标记的中断非常有用。没有标签中断只会终止选择。


查看完整回答
反对 回复 2021-12-13
?
梦里花落0921

TA贡献1772条经验 获得超6个赞

如果有一个标签,它必须是一个封闭的“for”、“switch”或“select”语句的标签,它就是执行终止的那个。

https://golang.org/ref/spec#Break_statements

此示例中的标签明确标记要终止的“for”。


查看完整回答
反对 回复 2021-12-13
?
守着一只汪

TA贡献1872条经验 获得超3个赞

使用break关键字终止执行,当你调试这段代码时,默认选项会被选中,然后break关键字执行停止程序。程序将无法进入 DONE 标签


查看完整回答
反对 回复 2021-12-13
  • 3 回答
  • 0 关注
  • 287 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信