返回

Go 语言系列21:goto 无条件跳转

发布时间:2023-09-07 12:03:14 248


在 Go 语言中保留 ​​goto​​​ 这点我确实没想到,毕竟很多人不建议使用 ​​goto​​​ 语句。​​goto​​ 后面接的是标签,表示下一步要执行哪里的代码。

goto label
...
label: code

下面是使用 ​​goto​​ 的例子:

package main

import "fmt"

func main() {
fmt.Println("A")
goto label
fmt.Println("B")
label:
fmt.Println("C")
}

在打印完字符 ​​A​​​ 之后,执行了 ​​goto​​​ 语句,跳转到 ​​label​​​ 标签处,继续执行打印字符 ​​C​​ 的语句,所以运行该程序输出如下:

A
C

​goto​​​ 语句通常与条件语句配合使用。可用来实现条件转移,构成循环,跳出循环体等功能。例如下面的程序输出数字 ​​0​​​ 到 ​​3​​ :

package main

import "fmt"

func main() {
num := 0
label:
if num < 4 {
fmt.Println(num)
num++
goto label
}
}

我们也可以使用 ​​goto​​​ 实现类似 ​​break​​ 的效果:

package main

import "fmt"

func main() {
num := 0
for {
if num > 3 {
goto label
}
fmt.Println(num)
num++
}
label:
fmt.Println("finish")
}

运行该程序输出如下:

0
1
2
3
finish

当然,我们也可以使用 ​​goto​​​ 实现类似 ​​continue​​ 的效果:

package main

import "fmt"

func main() {
num := 0
label:
for num < 11 {
if num % 2 == 1 {
num++
goto label
}
fmt.Println(num)
num++
}
}

运行该程序输出如下:

0
2
4
6
8
10

​goto​​ 语句与标签之间不能有变量声明,否则编译错误。编译下面的程序会报错:

package main

import "fmt"

func main() {
fmt.Println("A")
goto label
fmt.Println("B")
var x int = 0
label:
fmt.Println("C")
}

参考文献:

[1] Alan A. A. Donovan; Brian W. Kernighan, Go 程序设计语言, Translated by 李道兵, 高博, 庞向才, 金鑫鑫 and 林齐斌, 机械工业出版社, 2017.



特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
Go 语言系列22:方法 2023-09-07 09:11:36