Gol流程控制
条件语句
-
if语句
if 布尔表达式 { }else 布尔表达式{ }else{ }
- if语句后的{,一定要和if条件写在同一行,否则报错
- else一定要在if语句}之后,不能自己另起一行
-
if语句变型写法
if statement;conditon{//注意分号分隔 } //statement中可以声明变量,初始化变量等操作,其定义的变量可以在if语句的任何部分访问,出了if语句就无法访问
-
switch语句
switch 变量 { //这个变量没有类型限制 case val1: //val1是一个具体值 ... case val2: ... default: ... }
- switch可以作用在任何类型上,
- case后的数值必须与switch作用的变量类型一致
- case后的数据必须是唯一的,不能出现重复
- default语句是可选的
- if只能作用在布尔类型上
-
switch语句的其他写法
switch{ //省略switch后的变量,相当于变为switch true {}的形式,也就是swtich后有个隐式的变量,并且这个这个变量被赋值为true case true: ... case false: ... } v1 := 23 //case后的true形式,也可以是使用switch外部变量的表达式(能返回true或false) switch{ case v1<50: fmt.Println("aaaaaaaa") case v1>=50: fmt.Println("bbbbbbbbbbbb") }
switch{ case 数值1,数值2,数值3://case后可以跟随多个数值,也就是具有相同逻辑的分支条件可以写在一起 ... case 数值4,数值5: ... }
switch 初始化表达式;变量{ //同if一样,初始化语句与变量用;分隔 //初始化表达式中定义的变量,只能在switch语句中可以访问 }
//switch默认每个case最后带break,匹配成功后不会自动向下执行其他case,而是跳出整个switch,但是可以用fallthrough强制执行后边的case代码。 //fallthrough:用于穿透switch。当switch中某个case匹配成功之后,就执行该case语句,如果遇到fallthrough,那么后边紧邻的case,无需匹配,直接穿透执行。fallthrough必须放在case块的最后一行。 switch v:=1;v { case 1: fmt.Println(1) fallthrough case 2: fmt.Println(2) } 1 2 fallthrough会是break失效,继续顺序执行下一个case,并且下一个case无需匹配,直接穿透执行
-
for循环语句
//标准写法 for init;condition;post{} //省略表达式init,post //init;condition;post三个表达式都是可选的 //省略表达式init,post;效果相当于其他语言的while(条件) for ;condition; { }//;可以保留也可以去掉 for condition {} //同时省略三个表达式,相当于其他语言的while(true)永真 for{ } //省略表达式condition,相当于condition设置为永真true for ; ; {} //其余写法 for表达式中同时省略几个表达式都可以 省略init:初始条件可以写在for代码块之前 省略condition:循环永远成立--死循环 省略post:条件变化需要写在{}中,否则就是个死循环
循环结束: 条件不满足时,循环就结束了 但是通过break和continue语句可以强制结束循环
嵌套循环 break和continue默认结束离的最近的里层循环 如果先结束指定的某个循环,可以给指定循环贴标签(起名) out:for i:=0;i<5;i++{ for j:=0;j<3;j++{ fmt.Println(i,j) if i ==2 { break out //continue out } } }
-
goto语句
可以无条件的转移到程序中指定的行,通常配合条件语句使用。
goto label ..... ..... label: statement