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

以下代码等待“结果”通道为空,然后 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")


拉风的咖菲猫
浏览 288回答 3
3回答

GCT1015

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

梦里花落0921

如果有一个标签,它必须是一个封闭的“for”、“switch”或“select”语句的标签,它就是执行终止的那个。https://golang.org/ref/spec#Break_statements此示例中的标签明确标记要终止的“for”。

守着一只汪

使用break关键字终止执行,当你调试这段代码时,默认选项会被选中,然后break关键字执行停止程序。程序将无法进入 DONE 标签
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go