以下代码等待“结果”通道为空,然后 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 DONE
与goto DONE
C 或其他语言不同。标签标记 for 循环,哪个break DONE
语句在执行时将终止。它不会跳转到DONE
标签,它会终止标有DONE
标签的 for 循环。当您想从嵌套循环中中断或者像在您的情况下一样从 select 内部终止循环时,标记的中断非常有用。没有标签中断只会终止选择。
梦里花落0921
TA贡献1772条经验 获得超6个赞
如果有一个标签,它必须是一个封闭的“for”、“switch”或“select”语句的标签,它就是执行终止的那个。
https://golang.org/ref/spec#Break_statements
此示例中的标签明确标记要终止的“for”。
- 3 回答
- 0 关注
- 287 浏览
添加回答
举报
0/150
提交
取消