switch使用细节(2)|学习笔记

简介: 快速学习switch使用细节(2)

开发者学堂课程【Go语言核心编程 - 基础语法、数组、切片、Map:switch使用细节(2)】与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/625/detail/9571


switch使用细节(2)

内容介绍:

一、switch细节讨论

一、switch细节讨论

1、特性七

switch 后也可以不代表达式,类似多个 if-else 分支来使用。

案例:

定义变量age类型为int,赋值为10,满足 case 语句则进行输出。

代码为:

var age int = 10

switch {

case age == 10:

fmt.Println(age == 10)

case age == 20:

fmt.Println(age == 20)

default:

fmt.Println(没有匹配到)

}

运行结果:D:\goproject\src\go_code\chapter05\switchdemo\demo01>go run main.go

age == 10

甚至 case  中也可以对范围进行判断,当成范围来使用。如下定义一个成绩为30分,判断如果 score 大于90则输出成绩优秀,如果 score>=70并且 score<=90则输出成绩优良,如果 score>=60并且 score<=70则输出成绩合格,否则输出不及格。后面也可以写更多的 case 语句。这里 score 为30分,所以输出应该为不及格,下面运行程序进行验证。

代码为:

var score int = 30

switch {

case score > 90:

fmt.Println(成绩优秀..)

case score >= 70 && score <= 90:

fmt.Println(成绩优良...)

case score >=60 && score <= 70:

fmt.Println(成绩及格...)

default:

fmt.Println(不及格)

}D:\goproject\src\go_code\chapter05\switchdemo\demo01>go run main.go

age == 10

不及格

验证正确,如果将 score 改为90分,则应输出成绩优良,运行如下:D:\goproject\src\go_code\chapter05\switchdemo\demo01>go run main.go

age == 10

成绩优良

与上面的分析符合,这里要注意switch的这种用法在Golang中可以这么使用,但在其他传统编程语言中是不可以这么使用的。

2、特性八

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

案例:

如下在 switch 后定义变量 grade :=90,为了区别之前的代码在 Print 中加上~。

代码如下:

switch grade :=90;{ //在golang中,可以这样写

case grade > 90:

fmt.Println(成绩及格~..)

case grade >= 70 && score <= 90:

fmt.Println(成绩优良~...)

case grade >=60 && score <= 70:fmt.Println(成绩及格~...)

default:

fmt.Println(不及格~)

}

运行结果:D:\goproject\src\go_code\chapter05\switchdemo\demo01>go run main.go

age == 10

成绩优良

成绩优良~

3、特性九

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

案例:

定义变量 num 类型为 int,赋值为10,使用 num 进行匹配,如果 num=10就输出ok1,如果 num=20就输出ok2,如果 num=30就输出ok3,否则没有匹配成功。如果根据传统的方式进行执行的话,num匹配到case 10就不会再继续执行,输出ok1后代码就执行完退出程序。而如果在ok1后加上 fallthrough 语句,则会不判断case 20,直接输出ok2,不输出后面的ok3,因为默认只能穿透一层,要是想20也执行穿透就把10和20放在一起,如case10,20:,下面运行进行查看结果。

代码为:

var num int = 10

switch num{

case num == 10:

fmt.Println(ok1)

fallthrough //默认只能穿透一层

case num == 20:

fmt.Println(ok2)

case num == 30:

fmt.Println(ok3)

default:

fmt.Println(没有匹配到)

}

运行结果:D:\goproject\src\go_code\chapter05\switchdemo\demo01>go run main.go

age == 10

成绩优良

成绩优良~

ok1

ok2

如果在ok2后也加上 fallthrough 则ok3也会输出,代码为:

case num == 20:

fmt.Println(ok2)

fallthrough

运行结果:D:\goproject\src\go_code\chapter05\switchdemo\demo01>go run main.go

age == 10

成绩优良

成绩优良~

ok1

ok2

ok3

4、特性十

Type Switch:switch 语句还可以被用于 type-switch来判断某个 interface 变量中实际指向的变量类型【还没有学 interface,先体验一下】注意:interface 是接口

案例:如下代码 interface 是一个空接口,y赋值为10.0,再将 float 变量y赋值给x,接下来x.(type)就是 type 的使用,会把x指向的真正数据类型求出来,也就是说x本身是 interface,但因为把y赋值给x了,所以x真正的数据类型是 float64,于是i就会得到x真正指向的数据类型,i就是 float64类型,然后进行 case 判断,类型为空null,则输出x的类型为~,判断类型为 int,则输出x的类型为 int,以此类推。甚至可以判断是不是函数,接口也可以接收函数,只是这里暂时不讲。总结起来就是x.(type)运算结合 Switch 可以去判断空接口实际指向的数据类型。

代码为:

var x interface{ }

var y = 10.0

x= y

switch i := x.(type){

case null:

fmt.Println(x 的类型是~ :%T,i)

case int:

fmt.Println(x是int型)

case float64:

fmt.Println(x是float64型,i)

case func(int) float64:

fmt.Println(x是func(int)型,i)

case bool,string:

fmt.Println(x是bool型或string型,i)

default:

fmt.Println(未知型)

}

代码输出结果是 float64,因为y类型为 float64,当然y类型为 int 或者 int32等,都是可以进行判断的。这里就不再进行演示,等到讲解接口的时候会详细的说明。到此 switch 分支结构的细节讨论就讲解完全了,后面将进行 switch 的课堂练习加深 switch 分支的理解。

相关文章
|
5月前
switch的使用细节
switch的使用细节
48 0
|
编解码 开发者
数字音频基础(上)| 学习笔记
快速学习数字音频基础(上),介绍了数字音频基础(上)系统机制, 以及在实际应用过程中如何使用。
数字音频基础(上)| 学习笔记
|
存储 人工智能 算法
数字音频基础(下)| 学习笔记
快速学习数字音频基础(下),介绍了数字音频基础(下)系统机制, 以及在实际应用过程中如何使用。
数字音频基础(下)| 学习笔记
|
存储 开发者
数字音频基础(中)| 学习笔记
快速学习数字音频基础(中),介绍了数字音频基础(中)系统机制, 以及在实际应用过程中如何使用。
数字音频基础(中)| 学习笔记
|
Go 开发者
for 循环注意事项和细节(1)| 学习笔记
快速学习 for 循环注意事项和细节(1)
for 循环注意事项和细节(1)| 学习笔记
|
Go 开发者
for 循环注意事项和细节(2)| 学习笔记
快速学习 for 循环注意事项和细节(2)
for 循环注意事项和细节(2)| 学习笔记
|
SQL Shell 数据库
巧用Event发现问题
巧用Event发现问题
103 0
|
编译器 C++ 索引
C/C++零散知识点汇总之switch实现原理&switch和if-else对比
C/C++零散知识点汇总之switch实现原理&switch和if-else对比
|
编译器 Go 开发者
switch使用细节(1)|学习笔记
快速学习switch使用细节(1)
|
Go 开发者
switch使用细节(2)|学习笔记
快速学习switch使用细节(2)
104 0