我的Go+语言初体验——(5)Go+ 基本语法之 Switch

“我的Go+语言初体验” | 征文活动进行中…

Go+ 语言中提供多路分支条件语句 switch, 用于在不同条件下执行不同动作。
使用 if-else 嵌套结构也可以实现多路分支条件结构,但程序冗长,可读性差。
本文的例程按照 Go+ 进行了优化和测试,Go+ 的编程风格更加简洁。

1. Switch 语法:基本语法

switch 是多路分支条件语句, 用于基于不同条件执行不同动作。

使用 if-else 嵌套结构也可以实现多路分支条件结构,但程序冗长,可读性差。Go+ 提供了更简练的 Switch 多路分支条件语句,将一个表达式的求值结果与可能的值的列表进行匹配,并根据匹配结果执行相应的代码。

switch 语句执行的过程从上至下,直到找到匹配项,匹配项后面也不需要再加 break。

Go+ 编程语言中 switch 语句的语法如下:

switch var {case var1:statement(s);case var2:statement(s);// 可以定义任意个数的 casedefault: // Optionalstatement(s);
}

变量 var 可以是任何类型,var1, var2 可以是与 var 相同类型的常量、变量或表达式。

switch 语句中可以有表达式,也可以省略。如果 switch 语句中没有表达式,则默认为 “true”,并对每个 case 表达式求值,执行结果为 “true” 的 case。

2. 【例程1】switch 有表达式

// Example 1: a switch statement with expression
dayOfTheWeek := 0
switch dayOfTheWeek {case 1:println "Monday"
case 2:println "Tuesday"
case 3:println "Wednesday"
case 4:println "Thursday"
case 5:println "Friday"
case 6:println "Saturday"
case 0:println "Sunday"
}/* Running results:
Sunday
*/

3. 【例程2】switch 无表达式

// Example 2: a switch statement without expression
var num int = 80switch { //switch without expression
case num < 50:printf "%d < 50\n", num
case num < 100:printf "%d < 100\n", num
case num < 200:printf "%d < 200", num
}/* Running results:
80 < 100
*/

程序说明:

  1. switch 语句中没有表达式,则默认为 “true”。对每个 case 表达式求值,执行结果为 “true” 的 case。
  2. case 后面可以是常量,也可以是表达式,对 case 表达式求值,根据表达式的结果为 “true” 或 “false” 与 switch 进行匹配。

4. 【例程3】default case

在 Switch 语句中,关键字 default 表示:当没有其他 case 匹配时,将执行 default 语句。

显然,多个 case 和 default 只能执行一个。

// Example 3: a switch example with default case
// When no other case matches, the default statement is executed.
dayOfTheWeek := 2
switch dayOfTheWeek {case 0:println "Today is Sunday."
case 6:println "Today is Saturday."
default:println "Today is a weekday."
}/* Running results:
Today is a weekday.
*/

程序说明:

dayOfTheWeek := 2,与 switch 中的 case 0,case 6 都不匹配,执行 default 语句。


5. 【例程4】fallthrough

在 Go+ 语言中 case 是一个独立的代码块,默认情况下 case 最后自带 break 语句,匹配成功后就不会执行其他 case。

为了兼容一些移植代码,如果需要执行后面的 case,可以使用关键字 fallthrough 来实现这一功能。

fallthrough 必须是 case 语句块中的最后一条语句。如果它出现在语句块的中间,编译器将会报错。

新编写的代码,不建议使用 fallthrough。

// Example 4: a switch example with fallthrough
var num int = 80println "Switch with fallthrough:"
switch {case num < 50:printf "%d < 50\n", numfallthrough
case num < 100:printf "%d < 100\n", numfallthrough
case num < 200:printf "%d < 200", num
}/* Running results:
Switch with fallthrough:
80 < 100
80 < 200
*/

程序说明:

  1. 【例程4】与【例程2】的区别是 case 语句中的 “fallthrough”。【例程2】 case 语句中没有 “fallthrough”,程序依次对 case 表达式求值,直到找到匹配项,只要找到匹配项就跳出 switch 语句,而不再执行下一条 case。【例程4】 case 语句中带有 “fallthrough”,找到匹配项后并不会跳出 switch 语句,继续执行下一条 case。
  2. 如果 switch 没有表达式则按 “true” 进行匹配。
  3. case 中的表达式不必是常量,也可以在运行时被求值。

6. 【例程5】多条件匹配

在 Go+ 语言中,一个 case 分支中可以包含多个值或多个表达式,每个条件之间用逗号分隔。

多个值或表达式之间相当于 “与” 的关系,只要匹配其中的一个条件,就执行该 case 的语句。

// Example 5: a switch example of multiple expressions in case
var letter string = "u"switch letter {case "a", "e", "i", "o", "u":printf "%s is a vowel.", letter
default:printf "%s isn't a vowel.", letter
}/* Running results:
u is a vowel.
*/

【本节完】

版权声明:

原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/121722748)

Copyright 2021 youcans, XUPT

Crated:2021-12-04

欢迎关注『我的Go+语言初体验』系列,持续更新中…

我的Go+语言初体验——(1)超详细安装教程
我的Go+语言初体验——(2) IDE 详细安装教程
我的Go+语言初体验——(3)Go+ 数据类型
我的Go+语言初体验——(4)零基础学习 Go+ 爬虫
我的Go+语言初体验——(5)Go+ 基本语法之 Switch

“我的Go+语言初体验” | 征文活动进行中…

我的Go+语言初体验——(5)Go+ 基本语法之 Switch相关推荐

  1. 我的Go+语言初体验——go【Format】goplus

    欢迎大家参与[我的Go+语言初体验]活动: 活动地址:[https://bbs.csdn.net/topics/603464006?utm_source=1594742339] 前言: goplus的 ...

  2. 我的Go+语言初体验——10秒真男人游戏

    欢迎大家参与[我的Go+语言初体验]活动: 活动地址:[https://bbs.csdn.net/topics/603464006?utm_source=1594742339] git地址:[网不行, ...

  3. 我的Go+语言初体验——【四、版本更新环境变量配置】

    欢迎大家参与[我的Go+语言初体验]活动: 活动地址:[https://bbs.csdn.net/topics/603464006?utm_source=1594742339] 目录 拉取最新包[gi ...

  4. 我的Go+语言初体验——【三、spx案例测试_许式伟先生推荐补充(附-视频)】

    欢迎大家参与[我的Go+语言初体验]活动: 活动地址:[https://bbs.csdn.net/topics/603464006?utm_source=1594742339] 安装过程博文:[我的G ...

  5. 我的Go+语言初体验——【三、spx案例测试(附-视频)】

    欢迎大家参与[我的Go+语言初体验]活动: 活动地址:[https://bbs.csdn.net/topics/603464006?utm_source=1594742339] 安装过程博文:[我的G ...

  6. 我的Go+语言初体验——【一、go+环境WIN10_100%成功安装(附-视频)】

    欢迎大家参与[我的Go+语言初体验]活动: 活动地址:[https://bbs.csdn.net/topics/603464006?utm_source=1594742339] 安装过程博文:[htt ...

  7. 我的Go+语言初体验——ubuntu安装Go+环境问题锦集(二)

    欢迎大家参与[我的Go+语言初体验]活动: 活动地址:[https://bbs.csdn.net/topics/603464006?utm_source=1594742339] 本文为大家带来[Go+ ...

  8. 我的Go+语言初体验——goplus环境问题锦集(一)

    欢迎大家参与[我的Go+语言初体验]活动: 活动地址:[https://bbs.csdn.net/topics/603464006?utm_source=1594742339] 本文为大家带来[Go+ ...

  9. 我的Go+语言初体验--Go+之环境安装与程序编码初体验

    一.Go+ 简介 对于 Go+ 工程而言: Go+ 将支持所有 Go 功能(包括部分支持 cgo): Go+ 提供了更简单优雅的语法,比 Go 更接近自然语言: Go+ 易于学习,不必在一开始就处理工 ...

  10. 我的Go+语言初体验——(7)Go+ 分数型有理数数据类型

    我的Go+语言初体验--(7)Go+ 分数型有理数数据类型 "我的Go+语言初体验" | 征文活动进行中- 更多内容,请参阅: 我的Go+语言初体验--(7)Go+ 分数型有理数数 ...

最新文章

  1. sysbench 性能测试
  2. FTP 500 OOPS
  3. html页面退出用什么函数,离开网页弹窗函数onbeforeunload与onunload
  4. 人生应该记住的16句话
  5. 带有正则表达式模式的Google Guava Cache
  6. python加密模块教程_Python加密模块的hashlib,hmac模块使用解析
  7. linux文件名快速键入,linux修改文件名【使用模式】
  8. java版欧朋浏览器_Opera欧朋浏览器_Opera欧朋浏览器下载[2020官方最新版]Opera欧朋浏览器安全下载_ 极速下载...
  9. 概率图模型(PGM)学习笔记(四)-贝叶斯网络-伯努利贝叶斯-多项式贝叶斯
  10. PHP:解析url和查询参数query
  11. 上海内推 | 微软亚洲研究院上海人工智能组招聘深度学习研究实习生
  12. Android应用开发自定义图片剪辑头像设置
  13. Java for函数用法_Java函数式编程(四)集合的使用
  14. EXCEL简易的进度条
  15. 哥德尔递归汉译和原始递归——哥德尔原著英译拆解汉译之七
  16. 水果销售系统课程设计(第一阶段--需求分析)
  17. 软件性能测试完整指南,软件性能测试与调优指南.pdf
  18. 在c语言中sqr怎么变成int,Basi与c语言基础.ppt
  19. 基于 EasySwoole 实现通用队列
  20. java饭堂管理代码论文_[计算机设计精品] 基于java的餐饮管理系统(毕业论文).doc...

热门文章

  1. 设置搜狗浏览器为默认浏览器时被360拦截怎么办?
  2. idea 设置内存_IDEA新特性:提前知道代码怎么走!
  3. android中给button加图标,Android,如何在我的代码中的TabButton中添加图标
  4. poi 不自动计算 设置单元格公式_Java POI:如何读取Excel单元格的值而不是计算公式?...
  5. djpython教程_简单介绍Python的Django框架的dj-scaffold项目
  6. 多台Linux服务器之间互相免密登陆
  7. Spring Cloud —— RocketMQ 的消息类型
  8. Linux进阶之路————CentOS网络配置
  9. mac 黑窗口连接mysql_mac上终端起动MySQL的方法
  10. jni c 传递对象到java_JNI将二进制数据从C传递到Java