写点什么

【一 Go 到底】第十二天 ---switch

作者:指剑
  • 2022-10-12
    重庆
  • 本文字数:2028 字

    阅读完需:约 7 分钟

【一Go到底】第十二天---switch

一、switch 介绍

1.1 简介

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

  • 匹配项后无需加 break

1.2 基本语法


switch 表达式 {case 表达式1,表达式2,....: 代码块1case 表达式3,表达式4,....: 代码块2case 表达式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("输入错误,请重新输入....") }}
复制代码

二、使用详解

  1. case 后是一个表达式(即:常量值、变量、一个有返回值的函数等都可以)

  2. case 后的各个表达式的值的数据类型,必须和 switch 的表达式数据类型一致

  3. case 后面可以带多个表达式,使用逗号间隔。比如 case 表达式 1,表达式 2..

  4. case 后面的表达式如果是常量值(字面量),则要求不能重复

  5. case 后面不需要带 break,程序匹配到一个 case 后就会执行对应的代码块,然后退出 switch,如果一个都匹配不到,则执行 default

  6. default 语句不是必须的.

  7. switch 后也可以不带表达式,当作 if---else 使用

  8. switch 后也可以直接声明/定义一一个变量,分号结束,不推荐。

  9. 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("未匹配....") }}
复制代码


  1. 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("输入错误,请重新输入") }
}
复制代码


发布于: 刚刚阅读数: 3
用户头像

指剑

关注

InfoQ签约作者 2022-07-13 加入

AWS Community Builder,AWS Student Ambassador,阿里云专家博主,OPS社区创始成员

评论

发布
暂无评论
【一Go到底】第十二天---switch_Go_指剑_InfoQ写作社区