if 控制
- 条件表达式没有括号
- 支持一个初始化表达式(可以是并行方式)
- 左大括号必须和条件语句或else在同一行
- 支持单行模式
- 初始化语句中的变量为block级别,同时隐藏外部同名变量
1 | a := true |
for 循环
在 Go 中只有 for 一个循环语句关键字,没有 while ,但是支持3种形式
初始化和步进表达式可以是多个值
条件语句每次循环都会被重新检查,因此不建议在条件语句中使用函数,尽量提前计算好并以变量或常量代替
左大括号必须和条件语句在同一行
1 | // 第一种 |
死循环
1 | for { |
switch 选择
可以使用任何类型或表达式作为条件语句
不需要写break,一旦条件成立自动终止
如希望继续执行下一个case,需要使用 fallthrough 语句
支持一个初始化表达式(可以是并行方式),右侧需要跟分号
左大括号必须和条件语句在同一行
例子1,不需要写break,条件成立会自动终止:
1 | func sF1(){ |
输出为:
1 | a=1 |
例子2,如果希望继续执行下一个case,使用 fallthrough :
1 | func sF2() { |
输出为:
1 | a=0 |
例子3,支持一个初始化表达式,需要分号结尾 :
1 | func sF3() { |
输出为:
1 | a+b<=2 |
在 switch 中 b 的作用域在 switch中有效,所以外面是输出不到它的信息
跳转语句 与 标签
- 3个语句都可以配合标签使用
- 标签名区分大小写,若不适用会造成编译错误
- break 与 continue 配合标签可用于多层循环的跳出
- goto 是调整执行位置,与其他2个语句配合标签的结果并不相同
break
1 | func breakF() { |
输出:
1 | 2 |
当 i > 1 时,输出当前的值 break 结束循环,并继续执行剩下的代码
拥有2层for时,跳到最外面,使用标签,会跳到与标签同一级,然后执行for后面的代码
1 | func breakF1() { |
输出:
1 | 0 |
goto
如果将 break 改为 goto ,将会导致重新进入一次循环,导致死循环
1 | if i > 2 { |
可以将标签放在 for 之后
1 | - LABEL: |
输出:
1 | 0 |
continue
例子:
1 | func continueF1() { |
结果:
1 | before i 0 |
在 continue 之后都不会执行
1 | func continueF2() { |
输出:
1 | 0123456789 |
接下将换成 goto 发现输出都是0,其变成了死循环。goto 是调整执行位置
1 | 000000000000000000000000000000000000000000000000000000000000000000000.............. |
将 label 放在 goto 的后面
1 | func continueF2() { |