一尘不染

break 语句是否从 switch/select 中断?

go

我知道switch/select语句在每种情况下都会自动中断。我想知道,在以下代码中:

for {
    switch sometest() {
    case 0:
        dosomething()
    case 1:
        break
    default:
        dosomethingelse()
    }
}

是否break声明退出for循环或只是switch块?


阅读 182

收藏
2021-11-04

共2个答案

一尘不染

“break”语句终止最里面的“for”、“switch”或“select”语句的执行。

golang BreakStmt = "break" [ Label ] .

如果有标签,它必须是封闭的“for”、“switch”或“select”语句的标签,并且它是执行终止的语句(§For 语句、§Switch 语句、§Select 语句)。

golang L: for i < n { switch i { case 5: break L } }

因此,break您示例中的switch语句终止了该语句,即“最内层”语句。

2021-11-04
一尘不染

“break”语句终止同一函数内最里面的 “for”“switch”“select”语句的执行。

BreakStmt = "break" [ 标签 ] 。

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

OuterLoop:
    for i = 0; i < n; i++ {
        for j = 0; j < m; j++ {
            switch a[i][j] {
            case nil:
                state = Error
                break OuterLoop
            case item:
                state = Found
                break OuterLoop
            }
        }
    }
2021-11-04