持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天,点击查看活动详情
一、switch介绍
1.1 简介
- switch 语句用于基于不同条件执行不同动作,每一个case 分支都是唯一的,从上到下逐一测试,直到匹配为止。
- 匹配项后无需加
break
1.2 基本语法
switch 表达式 {
case 表达式1,表达式2,....:
代码块1
case 表达式3,表达式4,....:
代码块2
case 表达式5,表达式6,....:
代码块3
........
default:
代码块n
}
1.3 案例演示
package main
import "fmt"
func main() {
// 定义变量 today
var today byte
fmt.Printf("请输入数字(1,2,3,4,5):")
fmt.Scanf("%v", &today)
switch today {
case 1:
fmt.Println("今天是周一,麦当劳等你!")
case 2:
fmt.Println("今天是周二,快来达美乐!")
case 3:
fmt.Println("今天是周三,尖叫必胜客!")
case 4:
fmt.Println("今天是周四,疯狂肯德基!")
case 5:
fmt.Println("今天是周五,华莱士痛苦!")
default:
fmt.Println("输入错误,请重新输入....")
}
}
二、使用详解
- case 后是一个表达式(即:常量值、变量、一个有返回值的函数等都可以)
- case后的各个表达式的值的数据类型,必须和switch 的表达式数据类型一致
- case后面可以带多个表达式,使用逗号间隔。比如case表达式1,表达式2..
- case后面的表达式如果是常量值(字面量),则要求
不能重复 - case后面不需要带break,程序匹配到一个case后就会执行对应的代码块,然后退出switch,如果一个都匹配不到,则执行default
- default 语句
不是必须的. - switch 后也可以不带表达式,当作if---else使用
- switch 后也可以直接声明/定义一一个变量,分号结束,不推荐。
- switch 穿透 fallthrough,如果在case语句块后增加fallthrough,则会继续执行下一个case,也叫switch穿透。
package main
import "fmt"
func main() {
// switch - fallthrough
var num int = 10
switch num {
case 10:
fmt.Println("case 1")
fallthrough // 执行case 10后继续执行 case 20 , 但不会执行 case 30, 默认穿透一层
case 20:
fmt.Println("case 2")
case 30:
fmt.Println("case 3")
default:
fmt.Println("未匹配....")
}
}
- Type Switch: switch 语句还可以被用于type-switch来判断某个
interface变量中实际指向的变量类型
package main
import "fmt"
func main() {
// Type Switch 案例演示
// 声明空的接口
var x interface{}
// 声明float64类型变量 y
var y = 10.0
// 将 y 赋值给 x,此时 x 类型为 float64
x = y
switch i := x.(type) { // x.(type) 判断x 的类型
case nil:
fmt.Printf("x 类型为 : %T\n", i)
case int:
fmt.Printf("x 类型为 : %T\n", i)
case float64:
fmt.Printf("x 类型为 : %T\n", i)
case func(int) float64:
fmt.Printf("x 类型为 : %T\n", i)
case bool, string:
fmt.Printf("x 类型为 : %T\n", i)
default:
fmt.Printf("x 类型为 : %T\n", i)
}
}
三、案例演示
3.1 小写转大写
从键盘输入一个小写字符,转换为大写,其中a,b,c,d转换为对应的大写,其他的直接输出other
package main
import "fmt"
func main() {
// char 转换
// 将小写字母转换为大写,只转换 a,b,c,d , 其他的输出other
// 定义变量
var char byte
fmt.Printf("请输入一个字母:")
fmt.Scanf("%c", &char)
switch char {
case 'a':
fmt.Printf("%c\n", char-32)
case 'b':
fmt.Printf("%c\n", char-32)
case 'c':
fmt.Printf("%c\n", char-32)
case 'd':
fmt.Printf("%c\n", char-32)
default:
fmt.Println("other")
}
}
3.2 月份转换
根据用户输入的 月份,输出对应的季节
package main
import "fmt"
func main() {
// 将对应的月份输出为对应的季节
var month byte
fmt.Printf("请输入月份:")
fmt.Scanln(&month)
switch month {
case 1, 2, 3:
fmt.Println("当前月份属于 春季 ")
case 4, 5, 6:
fmt.Println("当前月份属于 夏季 ")
case 7, 8, 9:
fmt.Println("当前月份属于 秋季 ")
case 10, 11, 12:
fmt.Println("当前月份属于 冬季 ")
default:
fmt.Println("输入错误,请重新输入......")
}
}
3.3 根据日期(星期几)报菜单
package main
import "fmt"
func main() {
// 根据星期几报菜单
var daily string
fmt.Printf("请输入日期(星期):")
fmt.Scanln(&daily)
switch daily {
case "星期一":
fmt.Println("今天吃汉堡")
case "星期二":
fmt.Println("今天吃香肠")
case "星期三":
fmt.Println("今天吃土豆泥")
case "星期四":
fmt.Println("今天吃羊肉")
case "星期五":
fmt.Println("今天吃葱爆牛肉")
case "星期六":
fmt.Println("今天吃印度咖喱鸡")
case "星期日":
fmt.Println("今天吃扬州炒饭")
default:
fmt.Println("输入错误,请重新输入")
}
}