11. Go 语言流程控制:goto 无条件跳
source link: https://studygolang.com/articles/28471
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Hi,大家好,我是明哥。
在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。
我的在线博客: http://golang.iswbm.com
我的 Github:github.com/iswbm/GolangCodingTime
Go里的流程控制方法还是挺丰富,整理了下有如下这么多种:
- if - else 条件语句
- switch - case 选择语句
- for - range 循环语句
- goto 无条件跳转语句
- defer 延迟执行
前面三种,我已经都讲过了,今天要讲讲 goto 的无条件跳转。
很难想象在 Go 居然会保留 goto,因为很多人不建议使用 goto,所以在一些编程语言中甚至直接取消了 goto。
我感觉 Go 既然保留,一定有人家的理由,只是我目前还没感受到。不管怎样,咱还是照常学习吧。
0. 基本模型
goto
顾言思义,是跳转的意思。
goto 后接一个标签,这个标签的意义是告诉 Go程序下一步要执行哪里的代码。
所以这个标签如何放置,放置在哪里,是 goto 里最需要注意的。
goto 标签; ... ... 标签: 表达式;
1. 最简单的示例
goto
可以打破原有代码执行顺序,直接跳转到某一行执行代码。
import "fmt" func main() { goto flag fmt.Println("B") flag: fmt.Println("A") }
执行结果,并不会输出 B ,而只会输出 A
A
2. 如何使用?
goto
语句通常与条件语句配合使用。可用来实现条件转移, 构成循环,跳出循环体等功能。
这边举一个例子,用 goto
的方式来实现一个打印 1到5 的循环。
import "fmt" func main() { i := 1 flag: if i <= 5 { fmt.Println(i) i++ goto flag } }
输出如下
再举个例子,使用 goto 实现 类型 break 的效果。
import "fmt" func main() { i := 1 for { if i > 5 { goto flag } fmt.Println(i) i++ } flag: }
输出如下
最后再举个例子,使用 goto 实现 类型 continue的效果,打印 1到10 的所有偶数。
import "fmt" func main() { i := 1 flag: for i <= 10 { if i%2 == 1 { i++ goto flag } fmt.Println(i) i++ } }
输出如下
3. 注意事项
goto语句与标签之间不能有变量声明,否则编译错误。
import "fmt" func main() { fmt.Println("start") goto flag var say = "hello oldboy" fmt.Println(say) flag: fmt.Println("end") }
编译错误
.\main.go:7:7: goto flag jumps over declaration of say at .\main.go:8:6
系列导读
24. 超详细解读 Go Modules 前世今生及入门使用
欢迎关注我们的微信公众号,每天学习Go知识
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK