前言
流程控制用于设定程序执行的次序,建立程序的逻辑结构。通过与各种条件的配合,一般起到以下三个作用:
- 选择
- 循环
- 跳转
本文会介绍Go的流程控制基本用法和一些需要注意的点。
条件语句
关键字:if
、else
、else if
if
处只能用bool类型的数据作为判断条件,使用别的数据类型编译会不通过,不能像C语言那样使用0和非零分别代表false
和true
。
if a<0 {
return 0
}else {
return 1
}
应注意:
- 条件判断处无括号
()
- 无论语句体内有几条语句
{}
必须存在,并且{
必须与if
或else
同一行
选择语句
关键字:switch
、case
、select
(讲到通道channel时介绍)
Go语言不需要break
来退出一个case
,相反,只有使用fallthrough
才会继续执行下一个case
switch v {
case 3:
fmt.Println("3")
fallthrough
case 4:
fmt.Println("4")
case 5:
fmt.Println("5")
default:
fmt.Println("default")
}
同时,也可以不设定switch
后的条件表达式,这种情况下,整个switch
结构与if...else...
发挥的作用等同
switch {
case v == 3:
fmt.Println("v==3")
case v == 5:
fmt.Println("v==5")
default:
fmt.Println("default")
}
注意:
{
必须与switch
处于同一行switch
处的表达式可以是常量、整数、浮点数、字符串
循环语句
关键字:for
、range
(讲到数组、切片时介绍)
Go提供和Java一样关键字continue
、break
,分别实现进入下一次循环,和中断循环
for i := 0; i < 9; i++ {
if i == 5 {
continue
}
if i == 8 {
break
}
fmt.Println(i)
}
Go只支持for
循环,不支持while
或do-while
循环,不过可以使用for
循环实现类似的功能。
sum := 0
for {
sum++
if sum > 15 {
break
}
}
需注意:
{
必须与for
处于同一行- Go的for循环支持在循环条件中定义和初始化变量,但是不支持以
,
为间隔的多个赋值语句,必须使用平行赋值的方法来初始化多个变量,如:
for i, j := 0, 6; i < j; i++ {
...
}
- 如果有多重循环,Go可以使用
break
选择中断哪一层循环 如:
loop:
for i := 0; i < 5; i++ {
for j := 0; j < 5; j++ {
if j == 2 {
break loop
}
}
}
跳转语句
关键字:goto
goto
语句的语义非常简单,就是跳转到本函数内的某个标签
for i := 0; i < 10; i++ {
here:
fmt.Println(i)
if i < 6 {
i += 2
goto here
}
}
/*
结果:
0 2 4 6 7 8 9
*/