我是靠谱客的博主 顺利猫咪,这篇文章主要介绍go 的 switch 分支控制一 基本的介绍二 基本语法三 switch 的流程图四 快速入门五 switch 的使用的注意事项和细节六 switch 小练习七 switch 和 if 的比较,现在分享给大家,希望可以做个参考。
一 基本的介绍
1 switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上到下逐一测试,直到匹配为止。
2 匹配项后面不需要再加 break
二 基本语法
复制代码
1
2
3
4
5
6
7
8
9switch 表达式{ case 表达式1,表达式2... 语句块1 case 表达式3,表达式4... 语句块2 // 这里可以有多个case语句 default: 语句块 }
三 switch 的流程图
对上图的说明和总结
1 switch 的执行的流程是,先执行表达式,得到值,然后和 case 的表达式进行比较,如果相等,就匹配到,然后执行对应的 case 的语句块,然后退出 switch 控制。
2 如果 switch 的表达式的值没有和任何的 case 的表达式匹配成功,则执行 default 的语句块。执行后退出 switch 的控制。
3 golang 的 case 后的表达式可以有多个,使用逗号间隔。
4 golang 中的 case 语句块不需要写 break , 因为默认会有,即在默认情况下,当程序执行完 case 语句块后,就直接退出该 switch 控制结构。
四 快速入门
1 要求
编写一个程序,该程序可以接收一个字符,比如: a,b,c,d,e,f,g a表示星期一,b表示星期二 … 根据用户的输入显示相依的信息,要求使用 switch 语句完成
2 代码
复制代码
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
27package main import ( "fmt" ) func test(char byte) byte { return char + 1 } func main() { var key byte fmt.Println("请输入一个字符 a,b,c,d,e,f,g") fmt.Scanf("%c", &key) switch test(key) + 1 { case 'a': fmt.Println("周一, 猴子穿新衣") case 'b': fmt.Println("周二,猴子当小二") case 'c': fmt.Println("周三,猴子爬雪山") // 默认 default: fmt.Println("输入有误...") } }
3 测试
复制代码
1
2
3请输入一个字符 a,b,c,d,e,f,g a 周三,猴子爬雪山
五 switch 的使用的注意事项和细节
1 case/switch 后是一个表达式( 即: 常量值、变量、一个有返回值的函数等都可以)。
参考快速入门。
2 case 后的各个表达式的值的数据类型,必须和 switch 的表达式数据类型一致。
3 case 后面可以带多个表达式,使用逗号间隔。比如 case 表达式 1, 表达式 2 ...
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14package main import "fmt" func main() { var n1 int32 = 5 var n2 int32 = 20 switch n1 { case n2, 10, 5: // case 后面可以有多个表达式 fmt.Println("ok1") case 90: fmt.Println("ok2~") } }
测试结果
复制代码
1ok1
4 case 后面的表达式如果是常量值(字面量),则要求不能重复。
5 case 后面不需要带 break , 程序匹配到一个 case 后就会执行对应的代码块,然后退出 switch,如果一个都匹配不到,则执行 default。
6 default 语句不是必须的。
7 switch 后也可以不带表达式,类似 if --else 分支来使用。
复制代码
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
28package main import "fmt" func main() { // switch 后也可以不带表达式,类似 if --else分支来使用。 var age int = 10 switch { case age == 10: fmt.Println("age == 10") case age == 20: fmt.Println("age == 20") default: fmt.Println("没有匹配到") } // case 中也可以对范围进行判断 var score int = 90 switch { case score > 90: fmt.Println("成绩优秀..") case score >= 70 && score <= 90: fmt.Println("成绩优良...") case score >= 60 && score < 70: fmt.Println("成绩及格...") default: fmt.Println("不及格") } }
测试结果
复制代码
1
2age == 10 成绩优良...
8 switch 后也可以直接声明/定义一个变量,分号结束, 不推荐。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17package main import "fmt" func main() { // switch 后也可以直接声明/定义一个变量,分号结束,不推荐 switch grade := 90; { // 在golang中,可以这样写 case grade > 90: fmt.Println("成绩优秀~..") case grade >= 70 && grade <= 90: fmt.Println("成绩优良~...") case grade >= 60 && grade < 70: fmt.Println("成绩及格~...") default: fmt.Println("不及格~") } }
测试
复制代码
1成绩优良~...
9 switch 穿透-fallthrough ,如果在 case 语句块后增加 fallthrough ,则会继续执行下一个 case,也叫 switch 穿透。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20package main import "fmt" func main() { // switch 的穿透 fallthrought var num int = 10 switch num { case 10: fmt.Println("ok1") fallthrough // 默认只能穿透一层 case 20: fmt.Println("ok2") fallthrough case 30: fmt.Println("ok3") default: fmt.Println("没有匹配到..") } }
测试结果
复制代码
1
2
3ok1 ok2 ok3
10 Type Switch:switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际指向的变量类型。
六 switch 小练习
1 使用 switch 把小写类型的 char 型转为大写(键盘输入)。只转换 a, b, c, d, e. 其它的输出“other”。
代码
复制代码
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
28package main import ( "fmt" ) func main() { // 1 使用 switch 把小写类型的 char型转为大写(键盘输入) // 只转换 a, b, c, d, e. 其它的输出 “other”。 var char byte fmt.Println("请输入一个字符..") fmt.Scanf("%c", &char) switch char { case 'a': fmt.Println("A") case 'b': fmt.Println("B") case 'c': fmt.Println("C") case 'd': fmt.Println("D") case 'e': fmt.Println("E") default: fmt.Println("other") } }
测试
复制代码
1
2
3请输入一个字符.. a A
2 对学生成绩大于 60 分的,输出“合格”。低于 60 分的,输出“不合格”。(注:输入的成绩不能大于 100)
代码
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21package main import "fmt" func main() { // 2 对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。 // (注:输入的成绩不能大于100) var score float64 fmt.Println("请输入成绩") fmt.Scanln(&score) switch int(score / 60) { case 1: fmt.Println("及格") case 0: fmt.Println("不及格") default: fmt.Println("输入有误..") } }
测试
复制代码
1
2
3请输入成绩 80 及格
3 根据用户指定月份,打印该月份所属的季节。3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季
代码
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21package main import "fmt" func main() { var month byte fmt.Println("请输入月份") fmt.Scanln(&month) switch month { case 3, 4, 5: fmt.Println("spring") case 6, 7, 8: fmt.Println("summer") case 9, 10, 11: fmt.Println("autumn") case 12, 1, 2: fmt.Println("winter") default: fmt.Println("输入有误..") } }
测试
复制代码
1
2
3请输入月份 5 spring
七 switch 和 if 的比较
总结了什么情况下使用 switch ,什么情况下使用 if。
1 如果判断的具体数值不多,而且符合整数、浮点数、字符、字符串这几种类型。建议使用 swtich语句,简洁高效。
2 其他情况:对区间判断和结果为 bool 类型的判断,使用 if,if 的使用范围更广。
最后
以上就是顺利猫咪最近收集整理的关于go 的 switch 分支控制一 基本的介绍二 基本语法三 switch 的流程图四 快速入门五 switch 的使用的注意事项和细节六 switch 小练习七 switch 和 if 的比较的全部内容,更多相关go内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复