程序的流程控制决定了程序是如何执行的,主要有三大流程控制:
- 顺序控制
- 分支控制
- 循环控制
一、顺序控制
顺序控制时最简单的一种流程控制,强调代码从上到下依次执行,中间没有任何顺序和跳转。注意的是Go语言中变量采用前向引用。如:
func main() { var a int = 1 // 声明变量a var b int = a //使用变量a fmt.Println(b) }
上面就是先定义变量再使用,是正确的做法,相反如果先使用a而后再定义a就是错误的方法。
二、分支控制
分支控制就是让程序有选择的执行,主要分为三类:
- 单分支
- 双分支
- 多分支
(一)单分支
1、基本语法
if <condition> { // 执行代码块 }
2、实例
package main import "fmt" func main() { a := 10 if a > 5 { fmt.Println("大于5") } }
(二)双分支控制
1、基本语法
if <condition> { // 执行代码块 } else { // 执行代码块 }
2、实例
package main import "fmt" func main() { a := 10 if a > 5 { fmt.Println("大于5") } else { fmt.Println("小于等于5") } }
(三)多分支控制
1、基本语法
if <condition1> { // 执行代码块1 } else if <condition2> { // 执行代码块2 } else { // 执行代码块3 }
先判断条件1是否成立,如果为真就执行代码块1;如果条件1为假就去判断条件2是否成立,如果条件2为真,就执行代码块2;如果所有的条件都不为真就执行else中的代码块。
多分支只能有一个执行入口。
2、实例
package main import "fmt" func main() { a := 10 if a < 5 { fmt.Println("小于5") } else if a >= 5 && a < 10{ fmt.Println("大于等于5并且小于10") } else { fmt.Println("大于10") } }
(四)嵌套分支
在一个分支结构中完整的嵌套另一个完整的分支结构,里面的分支结构被称为内层分支,外面的分支结构被称为外层分支。
-
基本语法
if <condition1> { if <condition1.1> { } else { } } ...
三、switch分支控制
switch语句用于基于不同条件执行不同的动作,每一个case分支都是唯一的,从上到下逐一测试,直到匹配为止。匹配项后面不需要再加break.
1、基本语法
package main import "fmt" func main() { switch <condition> { case <condition1>,<condition2>...: // 代码块1 case <condition3>,<condition4>...: // 代码块2
... default: // 代码块3 } }
- switch执行流程是,限制性condition,得到值,然后和case的表达式进行比较,如果相等就匹配到,然后执行对应的case代码块,然后退出switch控制
- 如果switch表达式的值与任何的case表达式没有匹配成功,就执行default代码块,执行后退出switch流程控制
- Go语言中case后的表达式可以有多个,中间使用逗号隔开
- Go语言中case代码块中不需要使用break,因为默认会存在,当执行完case代码块中就会之间退出switch控制
2、实例
package main import "fmt" func main() { score := 90 switch { case score >= 90: fmt.Println("优秀...") case score >= 80 && score < 90: fmt.Println("良好...") default: fmt.Println("一般...") } }
另外也可以直接在switch后直接定义变量:
package main import "fmt" func main() { switch score := 90; { case score >= 90: fmt.Println("优秀...") case score >= 80 && score < 90: fmt.Println("良好...") default: fmt.Println("一般...") } }
如果在case代码块中添加fallthrough会进行穿透,会执行下一个case,默认穿透一层。
package main import "fmt" func main() { switch score := 90; { case score >= 90: fmt.Println("优秀...") fallthrough // 优秀...良好...
case score >= 80 && score < 90: fmt.Println("良好...") default: fmt.Println("一般...") } }
3、switch与if比较
- 如果判断的具体数值不多,建议使用switch语句
- 对区间判断为bool类型,建议使用if语句