首页 > 编程笔记

Go语言goto(跳过指定代码)

在 Go 语言中,关键字 goto 通过标签进行代码之间的无条件跳转,它不仅能快速跳出循环,还能简化重复性代码。

goto 的基本语法如下:
for 变量初始值; 判断条件; 变量控制 {
    goto 标签名
}
for 变量初始值; 判断条件; 变量控制 {
    goto 标签名
}
标签名:
    执行语句
关键字 goto 的后面必须加上标签名,程序查找对应标签并执行标签下面的代码。定义的标签名以及代码必须在 goto 关键字后面,否则程序会陷入无限循环。

举个简单的例子:
package main

import "fmt"

func main() {
    gofunc:
         fmt.Printf("使用goto跳转\n")
    for i := 1; i < 5; i++ {
         if i == 2 {
              goto gofunc
         }
         fmt.Printf("本次循环次数为:%v\n", i)
      }
}
运行上述代码,结果为:

使用goto跳转
本次循环次数为:1
使用goto跳转
本次循环次数为:1
使用goto跳转
......

程序一开始运行的时候,首先执行 for 循环,当变量 i 等于 2 的时候,程序将跳出循环执行标签 gofunc 的代码,由于程序的执行顺序是从上至下,所以程序执行标签 gofunc 的代码之后仍会执行 for 循环语句,这样使程序陷入无限循环状态。

为了解决 goto 带来的无限循环问题,定义的标签名以及代码最好放在程序的末端位置,示例如下:
package main

import "fmt"

func main() {
    for i := 1; i < 5; i++ {
         if i == 2 {
              goto gofunc
         }
         fmt.Printf("本次循环次数为:%v\n", i)
    }
    gofunc:
         fmt.Printf("使用goto跳转\n")
    fmt.Printf("程序结束了")
}
运行结果为:

本次循环次数为:1
使用goto跳转
程序结束了

由于标签 gofunc 的代码是在程序的末端位置,当跳转并执行 gofunc 的代码时,程序不再执行 for 循环语句,只执行 fmt.Printf() 语句,这样就能避免程序进入无限循环状态。

推荐阅读