Skip to content

跳转语句 ​

跳转语句用于改变程序的执行顺序。Go 提供了 break、continue 和 goto 三种跳转语句,它们可以配合标签(label)实现更精细的控制。

break ​

break 用于立即终止所在的 for 循环、switch 或 select 语句。注意:在嵌套于 for 的 switch/select 中,不带标签的 break 只跳出 switch/select 本身。

go
package main

import "fmt"

func main() {
    for i := 0; i < 10; i++ {
        if i == 5 {
            break
        }
        fmt.Println(i)
    }
}

配合标签可以一次跳出多层循环:

go
package main

import "fmt"

func main() {
outer:
    for i := 0; i < 3; i++ {
        for j := 0; j < 3; j++ {
            if i == 1 && j == 1 {
                break outer
            }
            fmt.Println(i, j)
        }
    }
    fmt.Println("结束")
}

详见 break。

continue ​

continue 用于跳过本轮循环中剩余的语句,直接进入下一轮迭代。它同样支持标签:

go
package main

import "fmt"

func main() {
    for i := 0; i < 5; i++ {
        if i%2 == 0 {
            continue
        }
        fmt.Println(i)
    }
}

详见 continue。

goto ​

goto 无条件跳转到同一函数内的标签处。Go 对 goto 有两条硬性限制:

  • 不能跳转到其他函数,也不能跨函数跳转。
  • 不能跳过标签之前的变量声明,否则编译报错 "jumps over declaration"。
go
package main

import "fmt"

func main() {
    i := 0
loop:
    if i < 3 {
        fmt.Println(i)
        i++
        goto loop
    }
    fmt.Println("结束")
}

goto 会让控制流难以追踪,日常代码中应优先使用 break、continue 或 return,仅在少数需要集中错误清理逻辑的场景下考虑使用。

详见 goto。

标签 ​

标签是一个紧跟冒号的标识符,用于标记语句的位置,可以被 break、continue 和 goto 引用。标签只在定义它的函数内有效,未被引用的标签会被编译器忽略(go vet 会给出提示)。

go
package main

import "fmt"

func main() {
done:
    for i := 0; i < 3; i++ {
        fmt.Println(i)
        if i == 1 {
            break done
        }
    }
}

参考资料 ​

同层页面 ​

相关页面 ​

Hello Golang