下面这段代码在满足条件时,需要连续退出两层循环,使用传统的编码方式如下:

 package main
import "fmt"
func main() {
    var breakAgain bool
    // 外循环
    for x := 0; x < 10; x++ {
        // 内循环
        for y := 0; y < 10; y++ {
            // 满足某个条件时, 退出循环
            if y == 2 {
                // 设置退出标记
                breakAgain = true
                // 退出本次循环
                break
            }
        }
        // 根据标记, 还需要退出一次循环
        if breakAgain {
                break
        }
    }
    fmt.Println("done")
}  

将上面的代码使用Go语言 的 goto 语句进行优化:

 package main
import "fmt"
func main() {
    for x := 0; x < 10; x++ {
        for y := 0; y < 10; y++ {
            if y == 2 {
                // 跳转到标签
                goto breakHere
            }
        }
    }
    // 手动返回, 避免执行进入标签
    return
    // 定义 breakHere 标签。
    breakHere:
    fmt.Println("done")
}  


使用 goto 语句后,无须额外的变量就可以快速退出所有的循环。