流程控制基本分为以下几个大类:
条件:
if
if ... else ...
if ... else if ...
循环:
for
range
选择:
switch ... case
select //C++所没有的关键字
跳转:
goto
//通常控制流程还会使用以下关键字搭配完成
break
continue
fallthrough //C++所没有的关键字
1.选择语句
go与C++对switch case的处理方式稍有不同,C++ case只有在遇到break才会跳出,而go的每个case默认自带break,而可能是为了某些情况下,需要连续执行多个case语句,于是有了关键字fallthrough,表示继续执行紧跟的下一个case
//fallthrough 用法
//switch 不一定要带表达式
//case 之后可以是表达式
switch {
case age>0 && age < 10:
fmt.Println("1")
case age>10 && age<20:
fmt.Println("2")
fallthrough
case age>20:
fmt.Println("3")
}
//age=5 输出 1
//age=15 输出 2 3
//age=25 输出 3
2.循环语句
go不支持以逗号为间隔的多赋值语句,必须使用平行赋值的方式来初始化多个变量
a := []int{1,2,3,4,5,6}
for i,j := 0,len(a)-1;i<j;i,j=i+1,j-1{
a[i],a[j] = a[j],a[i]
}
要从循环中跳出,可以用 break ,以往C++中在嵌套循环中要跳出多重循环体,需要用break+标记变量,而与C++的break相比,Go的break提供了更强大功能,Go可以指定跳到哪个循环体之外
for i:=0; i<3;i++{
for j:=0;j<2;j++{
if j + i > 4 {
break JLoop
}
}
}
JLoop:
// todo...
3.跳转 goto,很少用,属于用得好,堪称神器,用得不好,那就是鹤顶红
func myfunc(){
i := 0
Here:
fmt.Println(i)
i++
for i<10{
goto Here
}
}