概述
一 基本的介绍
1 switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上到下逐一测试,直到匹配为止。
2 匹配项后面不需要再加 break
二 基本语法
switch 表达式{
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 代码
package 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 测试
请输入一个字符 a,b,c,d,e,f,g
a
周三,猴子爬雪山
五 switch 的使用的注意事项和细节
1 case/switch 后是一个表达式( 即: 常量值、变量、一个有返回值的函数等都可以)。
参考快速入门。
2 case 后的各个表达式的值的数据类型,必须和 switch 的表达式数据类型一致。
3 case 后面可以带多个表达式,使用逗号间隔。比如 case 表达式 1, 表达式 2 ...
package 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~")
}
}
测试结果
ok1
4 case 后面的表达式如果是常量值(字面量),则要求不能重复。
5 case 后面不需要带 break , 程序匹配到一个 case 后就会执行对应的代码块,然后退出 switch,如果一个都匹配不到,则执行 default。
6 default 语句不是必须的。
7 switch 后也可以不带表达式,类似 if --else 分支来使用。
package 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("不及格")
}
}
测试结果
age == 10
成绩优良...
8 switch 后也可以直接声明/定义一个变量,分号结束, 不推荐。
package 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("不及格~")
}
}
测试
成绩优良~...
9 switch 穿透-fallthrough ,如果在 case 语句块后增加 fallthrough ,则会继续执行下一个 case,也叫 switch 穿透。
package 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("没有匹配到..")
}
}
测试结果
ok1
ok2
ok3
10 Type Switch:switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际指向的变量类型。
六 switch 小练习
1 使用 switch 把小写类型的 char 型转为大写(键盘输入)。只转换 a, b, c, d, e. 其它的输出“other”。
代码
package 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")
}
}
测试
请输入一个字符..
a
A
2 对学生成绩大于 60 分的,输出“合格”。低于 60 分的,输出“不合格”。(注:输入的成绩不能大于 100)
代码
package 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("输入有误..")
}
}
测试
请输入成绩
80
及格
3 根据用户指定月份,打印该月份所属的季节。3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季
代码
package 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("输入有误..")
}
}
测试
请输入月份
5
spring
七 switch 和 if 的比较
总结了什么情况下使用 switch ,什么情况下使用 if。
1 如果判断的具体数值不多,而且符合整数、浮点数、字符、字符串这几种类型。建议使用 swtich语句,简洁高效。
2 其他情况:对区间判断和结果为 bool 类型的判断,使用 if,if 的使用范围更广。
最后
以上就是顺利猫咪为你收集整理的go 的 switch 分支控制一 基本的介绍二 基本语法三 switch 的流程图四 快速入门五 switch 的使用的注意事项和细节六 switch 小练习七 switch 和 if 的比较的全部内容,希望文章能够帮你解决go 的 switch 分支控制一 基本的介绍二 基本语法三 switch 的流程图四 快速入门五 switch 的使用的注意事项和细节六 switch 小练习七 switch 和 if 的比较所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复