Hi,你们好,我是明哥。git
在本身学习 Golang 的这段时间里,我写了详细的学习笔记放在个人我的微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,所以写的东西应该会比较适合刚接触的同窗,若是你也是刚学习 Go 语言,不防关注一下,一块儿学习,一块儿成长。github
个人在线博客:http://golang.iswbm.com
个人 Github:github.com/iswbm/GolangCodingTimegolang
Go里的流程控制方法仍是挺丰富,整理了下有以下这么多种:编程
前面三种,我已经都讲过了,今天要讲讲 goto 的无条件跳转。数组
很难想象在 Go 竟然会保留 goto,由于不少人不建议使用 goto,因此在一些编程语言中甚至直接取消了 goto。微信
我感受 Go 既然保留,必定有人家的理由,只是我目前还没感觉到。无论怎样,咱仍是照常学习吧。编程语言
goto
顾言思义,是跳转的意思。函数
goto 后接一个标签,这个标签的意义是告诉 Go程序下一步要执行哪里的代码。学习
因此这个标签如何放置,放置在哪里,是 goto 里最须要注意的。3d
goto 标签; ... ... 标签: 表达式;
goto
能够打破原有代码执行顺序,直接跳转到某一行执行代码。
import "fmt" func main() { goto flag fmt.Println("B") flag: fmt.Println("A") }
执行结果,并不会输出 B ,而只会输出 A
A
goto
语句一般与条件语句配合使用。可用来实现条件转移, 构成循环,跳出循环体等功能。
这边举一个例子,用 goto
的方式来实现一个打印 1到5 的循环。
import "fmt" func main() { i := 1 flag: if i <= 5 { fmt.Println(i) i++ goto flag } }
输出以下
1 2 3 4 5
再举个例子,使用 goto 实现 类型 break 的效果。
import "fmt" func main() { i := 1 for { if i > 5 { goto flag } fmt.Println(i) i++ } flag: }
输出以下
1 2 3 4 5
最后再举个例子,使用 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++ } }
输出以下
2 4 6 8 10
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 前世此生及入门使用