Go条件判断之switch分支控制语句

1、switch分支控制介绍

switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上到下逐一测试,直到匹配为止。

语法:

switch 表达式 {

case 表达式1,表达式2, … :

语句块1

case 表达式3, 表达式4, … :

语句块2

//这里可以有多个case语句

default:

语句块

}

流程图:

image-20230201202350612

switch 的执行的流程是:

**1)**先执行表达式,得到值,然后和 case 的表达式进行比较,如果相等, 就匹配到,然后执行对应的 case 的语句块,然后退出 switch 控制。

**2)**如果 switch 的表达式的值没有和任何的 case 的表达式匹配成功,则执行 default 的语句块。执行后退出 switch 的控制.

**3)**golang 的 case 后的表达式可以有多个,使用 逗号 间隔.

**4)**golang 中的 case 语句块不需要写 break , 因为默认会有,即在默认情况下,当程序执行完 case 语句块后,就直接退出该 switch 控制结构。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main

import "fmt"

func main() {
var n1 int32 = 10
var n2 int32 = 20
switch n1 {
case n2, 11, 5:
fmt.Println("ok1")
default:
fmt.Println("没有匹配到")
}
}



//输出的结果
没有匹配到

2、switch分支控制练习题

1、switch 后也可以不带表达式,类似 if –else分支来使用。

2、case 中也可以对 范围进行判断

3、switch 后也可以直接声明/定义一个变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package main

import "fmt"

//这是一个测试switch代码
func main() {
var age int = 20
switch {
case age == 10:
fmt.Println("age==10")
case age == 20:
fmt.Println("age==20")
default:
fmt.Println("没有匹配到")
}
var score int
fmt.Println("请输入成绩:")
fmt.Scanln(&score)
switch {
case score > 90:
fmt.Println("成绩优秀")
case score >= 70 && score <= 90:
fmt.Println("成绩优良")
case score >= 60 && score < 70:
fmt.Println("成绩及格")
default:
fmt.Println("成绩不合格")

}
}

3、switch和if分支的对比

1)如果判断的具体数值不多,而且符合整数、浮点数、字符、字符串这几种类型。建议使用 swtich语句,简洁高效。

2)其他情况:对区间判断和结果为 bool 类型的判断使用 if,if 的使用范围更广。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!