流程控制
• 流程控制语句作用
▪ 选择:根据条件跳转到不同的执行序列。
▪ 循环:根据条件反复执行某个序列。
▪ 跳转:据条件返回到某执行序列。
• 流程控制语句类型
▪ 条件语句:关键字为if、else和else if。
▪ 选择语句:关键字为switch、case和select。
▪ 循环语句:关键字为for和range。
▪ 跳转语句:关键字为goto。
条件语句
• 语法如下
// 1
if condition { ... }
// 2 if condition { ... } else { ... }
// 3 if condition { ... } else if condition { ... }
// 4 if condition { ... } else if condition { ... } else { ... }
• 注意点
▪ 条件语句不需要使用括号()将条件包含起来。
▪ 条件语句无论语句体内有几条语句,花括号{}都必须存在。
▪ 条件语句的左花括号{必须与if或else同处一行,否则编译器给出错误:syntax error: missing { after if clause。
▪ 条件语句的else必须和上一个语句体结束的右花括号}同处一行,否则编译器给出错误:syntax error: unexpected else, expecting }。
▪ 条件语句在if之后可以添加变量初始化语句,但需要使用分号;间隔。
if a := 1; a >= 1 { fmt.Println("OK") }
选择语句
• 语法如下
switch condition { case v0: ... case v1: ... case v2: ... case v3: ... case v4, v5, v6: ... default: ... }
• 注意点
▪ 选择语句中,左花括号{必须与switch同处一行。
▪ 选择语句中,case后可以使用常量,还可以使用变量。
package main import "fmt" func main() { condition := 0 caseValue := 0 switch condition { case caseValue: fmt.Printf("0") case 1: fmt.Printf("1") default: fmt.Printf("Default") } }
▪ 选择语句中,单个case后可以出现多个结果选项。
▪ 选择语句中,不需要用break来明确退出一个case。
▪ 选择语句中,只有在case中明确添加fallthrough关键字,才会继续执行下一个case。
package main import "fmt" func main() { condition := 1 switch condition { case 0: fmt.Printf("0") case 1: fmt.Printf("1") fallthrough default: fmt.Printf("Default") } }
▪ 选择语句中,可不设定switch后的条件表达式,在此种情况下整个switch结构与if...else...的逻辑等同。
package main import "fmt" func main() { num := 1 switch { case 0 <= num && num <= 3: fmt.Printf("0-3") case 4 <= num && num <= 6: fmt.Printf("4-6") case 7 <= num && num <= 9: fmt.Printf("7-9") } }
跳转语句
• 语法如下
goto label
• 注意点
▪ 选择语句的语义非常简单,就是跳转到本函数内的某个标签处执行。
package main import "fmt" func main() { i := 0 for { i++ if i >= 10 { goto finish } } finish: fmt.Println("Finish") }
循环语句
• 语法如下
// 普通循环 for i := 0; i < N; i++ { ... } // 数组循环 for i, v := range array { ... } // 无限循环 for { ... }
• 注意点
▪ 循环语句只支持for结构,不支持while和do-while结构。
▪ 循环语句左花括号{必须与for处于同一行。
▪ 循环语句不支持以逗号为间隔的多赋值语句,支持使用多元赋值的方式来初始化多个变量。
package main import "fmt" func main() { array := []int{1, 2, 3, 4, 5, 6} for i, j := 0, len(array)-1; i < j; i, j = i+1, j-1 { array[i], array[j] = array[j], array[i] } fmt.Println(array) }
▪ 循环语句支持continue和break来控制循环,但提供了一个更高级的break,可以选择中断哪一层循环。
package main import "fmt" func main() { JLoop1: // 标记循环1,此处不能有非循环代码,break label会跳出循环1 for j := 0; j < 5; j++ { JLoop2: // 标记循环2,此处不能有非循环代码,break label会跳出循环2 for i := 0; i < 10; i++ { if j < 3 { break JLoop2 // 跳出循环2 } if i > 5 { break JLoop1 // 跳出循环1 } fmt.Println(j, i) } } }
有疑问加站长微信联系(非本文作者)