下面这段代码在满足条件时,需要连续退出两层循环,使用传统的编码方式如下:
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 语句后,无须额外的变量就可以快速退出所有的循环。