[go学习笔记.第五章.流程控制] 2.switch基本介绍

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

2).匹配项后面也不需要再加break

基本语法
switch 表达式 {
    case 表达式1,表达式2...:
        语句块1
    case 表达式3,表达式4...:
        语句块2
    //这里可以有多个case语句
    ...
    default:
        语句块
}

对上图的说明:

1).switch的执行流程是:先执行表达式,得到值,然后和case的表达式进行比较,如果相等,就执行对应case的语句块,然后退出switch

2).如果switch的表达式的值没有和任何的case的表达式相匹配,则执行default中的语句块,执行后退出switch

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

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

//快速入门
//编写一个程序:可以接收一个字符,eg:1,b,c,d..,a表示周一,b表示周二,..根据用户的输入显示相应的信息
//思路分析:
//1.定义一个变量byte接收输入的字符
//2.使用switch完成
var key byte
fmt.Println("请输入一个字符,eg:a,b,c,d..")
fmt.Scanf("%c", &key)
switch key {
    case "a":
        fmt.Println("周一吃面")
    case "b":
        fmt.Println("周二吃螺蛳粉")
    case "c":
        fmt.Println("周三吃火锅")
    ...
    default:
        fmt.Println("错误")
}

 switch细节讨论

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

switch test(key) + 1 {
    case "a":
        fmt.Println("周一吃面")
    ...
    default:
        fmt.Println("错误")
}

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

var n1 int32 = 20
var n2 int64 = 20
switch n1 {
    case n2:    // 错误,因为n2的数据类型和n1的不一致
        fmt.Println("ok1")
    default:
        fmt.Println("没有匹配到")
}

3).case后可以带多个表达式,使用逗号间隔

var n1 int32 = 20
var n2 int32 = 21
switch n1 {
    case n2, 22, 20:    // case后可以有多个表达式
        fmt.Println("ok1")
    default:
        fmt.Println("没有匹配到")
}

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

var n1 int32 = 20
var n2 int32 = 21
switch n1 {
    case n2, 22, 20:    // case后可以有多个表达式
        fmt.Println("ok1")
    case 22:    //错误,前面有常量22,重复了,所以报错
        fmt.Println("ok2")
    default:
        fmt.Println("没有匹配到")
}

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

6).default语句不是必须的

7).switch后面也可以不带表达式,类似多个if--else分支来使用

var age int = 20

switch {
    case age == 20:
        fmt.Println("age==20")
    case age == 20:
        fmt.Println("age==20")
    default:
        fmt.Println("没有匹配到")
}

//case中也可以对范围进行判断
var score int = 30

switch {
    case score > 80:
        fmt.Println("成绩优秀")
    case score > 70 && score <= 80:
        fmt.Println("成绩良好")
    case score > 60 && score <= 70:
        fmt.Println("成绩及格")
    default:
        fmt.Println("成绩不及格")
}

8).switch后也可以直接声明/定义一个变量,分号结束,但是不推荐这样使用

switch score := 90; {
    case score > 80:
        fmt.Println("成绩优秀")
    case score > 70 && score <= 80:
        fmt.Println("成绩良好")
    case score > 60 && score <= 70:
        fmt.Println("成绩及格")
    default:
        fmt.Println("成绩不及格")
}

9).switch穿透:fallthrough,如果在case语句块后增加fallthrough,则会继续执行下一个case,也叫switch穿透

	var num int = 10
	switch num {
	case 10:
		fmt.Println("ok", num)
		fallthrough    //默认只能穿透一层
	case 20:
		fmt.Println("ok", num)
	case 30:
		fmt.Println("ok", num)
	default:
		fmt.Println("no")
	}

10).Type Switch:switch语句还可以被用于type-switch来判断某个interface变量中实际指向的变量类型

    //案例
	// 小写类型的 a b c d e转换成大写,其他的other,键盘输入
	var char byte
	fmt.Println("请输入一个字符:")
	fmt.Scanf("%c", &char)
	switch char {
	case 'a', 'b', 'c', 'd', 'e':
		fmt.Printf("字符%c的大写为:%v", char, strings.ToUpper(string(char)))
	default:
		fmt.Println("other")
	}

 switch和if的比较

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

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

上一节:[go学习笔记.第五章.流程控制] 1.if基本介绍 

下一节:[go学习笔记.第五章.流程控制] 3.for,while和dowhile基本介绍

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值