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

相关文章
|
前端开发 JavaScript 小程序
7 款最棒的开源 React UI 库测评 - 特别针对国内使用场景推荐
优秀的 React UI 组件库,帮我们节省开发时间,提高开发效率,统一设计语言。更棒的是内置的功能复杂,我们自己很难处理的常用组件,比如表格、表单、富文本编辑器、时间日期选择器、实时拖拽组件等,再进一步,还有帮我们把组件的轮子装好的 React admin 后台管理系统。本文推荐 7 款适用于中文使用者习惯的开源 React UI 库,特别针对国内使用场景推荐。
1311 0
|
Web App开发 运维 监控
物联网3D,物业基础设施3D运维,使用webgl(three.js)与物联网设备结合案例。搭建智慧楼宇,智慧园区,3D园区、3D物业设施,3D楼宇管理系统——第八课
物联网相比这些年来,大家都了解很多了,直白的讲,就是万物互联,万物上网。那么这里的物联网3D就是指通过三维可视化的方式展现物联网监控设备。对设备的位置信息,状态信息能一目了然。面向IT设施和资源的一体化综合监控与远程操控方式。通过三维可视化方式展现,解决监控资源繁多、开源工具使用复杂、问题定位困难等问题。
1082 0
物联网3D,物业基础设施3D运维,使用webgl(three.js)与物联网设备结合案例。搭建智慧楼宇,智慧园区,3D园区、3D物业设施,3D楼宇管理系统——第八课
|
1月前
|
人工智能
一个帮运营写产品详情页的AI指令
分享一套实用的电商详情页AI生成指令模板,涵盖标题、卖点、场景、参数、保障等核心模块,帮助运营、产品经理等快速产出80分初稿,大幅提升效率。适配主流AI工具,结合人工优化,轻松应对多平台需求。
743 7
|
30天前
|
机器学习/深度学习 人工智能 自然语言处理
双 11 电商效率突围:10 款 AI 工具的技术落地与实践指南
2025年双11促销长达38天,电商迎来AI重构关键期。本文剖析10款主流AI工具技术原理,涵盖设计、文案、投放、客服等场景,揭示计算机视觉、自然语言处理等技术如何驱动电商智能化升级,助力企业高效应对大促挑战。
327 1
|
6月前
|
机器学习/深度学习 人工智能 监控
什么是信息化?什么是数字化?这两者有什么联系和区别?
本文探讨了信息化与数字化的概念、联系及区别。信息化是将线下业务流程线上化,提升效率;数字化则基于大数据和新技术优化企业运营模式,重构商业逻辑。两者层层递进,信息化为基础,数字化为升级。文中通过实例对比二者在理念、方法、数据应用等方面差异,并强调数字化转型需明确目标,借助低代码等工具实现能力重构,推动企业全价值链连通与效率提升。总结指出,真正的转型是能力的全面提升,而非单纯技术替换。
|
7月前
|
SQL 分布式计算 运维
dataphin评测报告
本文是一篇关于Dataphin的使用总结与测评报告。作为一位开发工程师,作者在使用Dataphin过程中发现其具备数据规范化构建、全链路数据治理、数据资产化及跨平台兼容的优势,能有效降低开发门槛并提升效率。文章详细介绍了从进入工作台到数据规划、引入数据、数据处理、功能周期任务补数据、数据验证以及数据分析的全流程操作步骤,并通过截图辅助说明,帮助用户快速上手Dataphin,实现高效的数据开发与治理,在测评使用过程中整体感觉dataphin这个产品功能非常强大,能够为开发人员提高工作效率,界面也是比较清晰的感觉,容易初学者上手学习。
185 3
dataphin评测报告
|
1月前
|
存储 负载均衡 安全
NAKIVO Backup & Replication 11.1 发布 - 快速高效能的备份解决方案
NAKIVO Backup & Replication 11.1 发布 - 快速高效能的备份解决方案
117 0
|
缓存 Java Shell
Android 系统缓存扫描与清理方法分析
Android 系统缓存从原理探索到实现。
484 15
Android 系统缓存扫描与清理方法分析
|
Ubuntu Docker 容器
迁移harbor
在Ubuntu 22.04 LTS环境中,已安装Docker的Harbor从v2.5.3迁移到v2.9.0,保留原有镜像数据。参考官方文档[v2.9.0](https://goharbor.io/docs/2.9.0/),执行包括数据目录复制、解压新版本、配置harbor.yml和docker-compose.yml、运行安装脚本等步骤。迁移后,通过测试推拉镜像确保功能正常。注意查看潜在的部署问题。
372 0
|
SQL 数据库 索引
SQL CREATE INDEX
【11月更文挑战第16天】
490 3