Go语言支持以下几种流程控制语句
条件语句:关键字为 if,else 和else if
选择语句:关键字为switch,case和select(在channel中使用)
循环语句:关键字为 for 和 range
跳转语句:关键字 goto
条件语句: if else 和 else if
func main() {
demo :=example(2)
fmt.Println(demo)
}
func example( x int) int {
if x == 0 { //不需要将 x==0 括起来,左花括号必须与if在同一行,所有if中的花括号必须存在
return 1
}else {
return x
}
}
注:if语句允许在if里面声明变量,但是这个变量的作用域只在该条件逻辑块内。
选择语句: 不用break结尾,go语言默认每个case最后都带有break
func main() {
var i string = "3"
switch i {
case "1":
fmt.Println("这是1")
case "2":
fmt.Println("这是2")
case "3":
fallthrough //强制跳到下一个case,必须存在下一个case或者default,否则报错
case "4":
fmt.Println("这是4")
}
}
上面的switch 后面的表达式不是必须的,因此上面的可以修改为:
func main() {
var i int = 3
switch {
case i==1:
fmt.Println("这是1")
case i==2:
fmt.Println("这是2")
case i==3:
fallthrough
case i==4:
fmt.Println("这是4")
}
}
循环语句 :for 和range
Go 只有一种循环结构——for 循环。
func main() {
nums := [10]int{1,2,3,4,5,6,7,8,9,10}
for a,b:=range nums{ //这里的a只索引下标,b指索引下标对应的元素值
fmt.Println(a,b)
}
}
当没有指定循环条件时,将成为死循环
for{
fmt.Println()
}
goto,break,continue的使用与区别
在Go语言的for循环中也支持使用break,continue来控制循环,break是跳出当前循环,continue是跳出本次循环。Go语言中break有个更为高级的功能:跳转到指定标签
以下面这个代码为例
func main() {
for i:=0;i<5 ;i++ {
fmt.Print(" ")
fmt.Print(i," ")
for j:=0;j<5 ;j++ {
fmt.Print(j)
}
}
}
----output----
0 01234 1 01234 2 01234 3 01234 4 01234
加入判断条件与break
func main() {
for i:=0;i<5 ;i++ {
fmt.Print(" ")
fmt.Print(i," ")
for j:=0;j<5 ;j++ {
fmt.Print(j)
if j == 3 {
break
}
}
}
}
----output----
0 0123 1 0123 2 0123 3 0123 4 0123
再添加自定义loop标签,让break跳出到指定的标签,注:loop标签可以自定义,我这里标签名叫做loop,你可以命名为其他
func main() {
loop://自定义跳转标签 ①
for i:=0;i<5 ;i++ {
fmt.Print(" ")
fmt.Print(i," ") ②
for j:=0;j<5 ;j++ {
fmt.Print(j)
if j == 3 {
break loop
}
}
}
}
-----output-----
0 0123
经过上面的测试,我们可以看出:
①未使用loop标签时,break是跳出当前循环
②使用loop标签后,break就会终止loop处的外层循环
③loop标签不能使用在break之后,若放在break之前,loop必须是跟break连接成一个整的循环,比如放在代码中的①或②处都可以。
break与continue是配合for使用的,但goto的使用不限于for,通常与条件语句配合使用。
比如下面这个代码中,当for循环到i=3时,跳转到loop标签输出
func main() {
for i:=0;i<5 ;i++ {
fmt.Println(i)
if i == 3 {
goto loop //跳转带 loop 标签处
}
}
loop:
fmt.Println("loop 标签")
}
-----output-----
0
1
2
3
loop 标签
当loop标签在for循环前面时,这时候 goto跳转到 loop标签就会形成死循环
func main() {
loop: // 这里就会形成死循环
fmt.Println("loop 标签")
for i:=0;i<5 ;i++ {
fmt.Println(i)
if i == 3 {
goto loop //跳转到 loop标签
}
}
}
除了for循环外,其他的使用goto的场景
func main() {
a := 3
fmt.Println(a+1)
goto loop
fmt.Println(a+2)
loop:
fmt.Println("loop 标签")
}
-----output-----
4
loop 标签
根据上面的测试,我们可以看出:
①goto的使用不限于for,通常与条件语句配合使用,可以实现满足某条件后跳出循环体到指定的地方继续执行。
②goto语句可以无条件的进行跳转到指定行。
③goto跳转的标签既可以定义在for循环前面,也可以定义在for循环后面。在for前面时就有可能形成死循环,在for循环后面就会执行标签下面的代码。
④一般情况下,不推荐使用goto语句,很容易造成代码流程混乱。
网友评论