1. if-else
condition 不需要用 () 括起来;
关键字 if 和 else 之后的左大括号 {
必须和关键字在同一行,如果你使用了 else-if 结构,则前段代码块的右大括号 }
必须和 else-if 关键字在同一行。这两条规则都是被编译器强制规定的。
只存在单个分支时:
// { 必须和 if 在同一行 if condition { // do something }
存在两个分支时:
// { 必须和 if 在同一行 if condition { // do something } else { // { 必须和 else 在同一行 // do something }
存在两个以上的分支时:
// { 必须和 if 在同一行 if condition { // do something } else if condition2{ // { 必须和 else if 在同一行 // do something } else { // { 必须和 else 在同一行 // do something }
存在较多的分支时,建议使用 swaitch 结构,这样可读性更好
1.1 if 包含一个初始化语句
if 后跟一个初始化语句,然后跟分号 ' ; ',然后跟条件表达式
if cc := 12;cc > 10 { fmt.Println("cc is > 10",cc) }
通过函数返回值为初始化变量赋值
func controlIf(condition int) { if cc := add(13);cc > 10 { fmt.Println("cc is > 13",cc) } } func add(i int)(result int) { return i+1 }
2. swaitch
相比于Java,switch 更加灵活,它可以接收任意形式的表达式,一般结构为
switch var { case var1: ... case var2: ...default: ... }
1. var、var1、var2 可以使同类型的任意值,或者最终结果为相同类型的表达式;
2. switch 关键字必须和 { 在同一行;
3. 当匹配到某个case分之后,执行完相应的代码后自动退出 switch 结构,不需要使用 break 来退出switch 结构;
4. 执行完匹配的分支后,若要继续执行下面的分支,可以在匹配的分支后添加 fallthrough 关键字实现;
5. var1、var2 这些变量可以替换为表达式;
// condition = 2 func controlSwitch(condition int) { condition =2 switch condition { // controlSwitch: 2 case 1: fmt.Println("controlSwitch:",condition) case 2: fmt.Println("controlSwitch:",condition) default: fmt.Println("controlSwitch:",condition) } switch condition { /** fallthrough controlSwitch: 2 fallthrough controlSwitch: 3 fallthrough controlSwitch: default */ case 2: fmt.Println("fallthrough controlSwitch:",2) fallthrough case 3: fmt.Println("fallthrough controlSwitch:",3) fallthrough default: fmt.Println("fallthrough controlSwitch:","default") } cc :=2 switch condition/2 { // controlSwitch: cc/2 case cc/2: fmt.Println("controlSwitch:","cc/2") case 2: fmt.Println("controlSwitch:",2) default: fmt.Println("controlSwitch:","default") } }View Code
3. for
3.1 基于计数器的迭代
func controlFor(condition int) { for i :=0;i<condition ; i++ { fmt.Println("controlFor:",i) } }
变量 i 的生命周期在循环完成后就已经结束,下次循环时还可以继续使用变量i
3.2 基于条件判断的迭代
类似于 while 循环
var x = 5 for x > 0{ x-- }
3.3 无限循环
三种形式效果一样
for { fmt.Println(123) } for ; ; { fmt.Println(123) } for true { fmt.Println(123) }
3.4 for-range
类似于 Java 的 foreach,但是该结构可以直接获取到当前遍历元素的下标,并且不用显示指定 遍历元素的类型
var array [5]int for key, value := range array { fmt.Println(key,value) } /** 输出 0 0 1 0 2 0 3 0 4 0 */
4. break、continue
4.1 break
一个 break 的作用范围为该语句出现后的最内部的结构,它可以被用于任何形式的 for 循环(计数器、条件判断等)。但在 switch 或 select 语句中,break 语句的作用结果是跳过整个代码块,执行后续的代码。
4.2 continue
continue 忽略剩余的循环体而直接进入下一次循环的过程,但不是无条件执行下一次循环,执行之前依旧需要满足循环的判断条件