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 分支的理解。

相关文章
|
缓存 运维 容灾
阿里配置中心Diamond探索
Diamond作为配置中心中间件在阿里内部非常常用,diamond不仅适用于业务应用,各种中间件也能看到它的身影,可见其“配置管理”、“动态配置推送”能力十分重要。这里我将记录学习diamond的过程,秉承着知其然知其所以然的想法,来探索这个🐂🍺的中间件底座。 学习之前需要先带着几个问题,为什么会诞生diamond?diamond的原理是什么?用了diamond需要注意什么?
9584 4
|
9月前
|
Java
IDEA 自动生成序列号
IDEA 自动生成序列号
600 0
|
9月前
|
存储 XML Dubbo
dubbo(2.7.3) 9.动态中心配置
dubbo(2.7.3) 9.动态中心配置
|
存储 算法 搜索推荐
时间复杂度:一步步理解算法效率
时间复杂度:一步步理解算法效率,更多文章可关注我的微信公众号:Python学习杂记
604 0
|
6月前
|
关系型数据库 MySQL 数据库
【MySQL】手把手教你MySQL数据同步
【MySQL】手把手教你MySQL数据同步
|
9月前
|
数据采集 Web App开发 JavaScript
爬虫技术升级:如何结合DrissionPage和Auth代理插件实现数据采集
本文介绍了在Python中使用DrissionPage库和Auth代理Chrome插件抓取163新闻网站数据的方法。针对许多爬虫框架不支持代理认证的问题,文章提出了通过代码生成包含认证信息的Chrome插件来配置代理。示例代码展示了如何创建插件并利用DrissionPage进行网页自动化,成功访问需要代理的网站并打印页面标题。该方法有效解决了代理认证难题,提高了爬虫的效率和安全性,适用于各种需要代理认证的网页数据采集。
541 0
爬虫技术升级:如何结合DrissionPage和Auth代理插件实现数据采集
|
9月前
|
存储 分布式计算 大数据
odps是什么
【5月更文挑战第5天】odps是什么
2235 6
|
9月前
|
SQL 存储 关系型数据库
【Hive】Hive有哪些方式保存元数据,各有哪些特点?
【4月更文挑战第17天】【Hive】Hive有哪些方式保存元数据,各有哪些特点?
|
4月前
|
数据采集 存储 数据处理
数据治理:如何制定数据标准与规范
在当今这个数据驱动的时代,数据已成为企业最宝贵的资产之一。然而,随着数据量的爆炸性增长和数据来源的多样化,如何有效地管理和利用这些数据成为了企业面临的重大挑战。数据治理作为确保数据质量、安全性、合规性和可访问性的关键过程,其核心在于制定并执行一套科学、合理的数据标准与规范。本文将探讨如何制定数据标准与规范,以推动企业的数据治理实践。
1081 3
lodash求最大值
lodash求最大值
334 0

热门文章

最新文章