Go 语言中的 Switch 语句详解

switch语句

使用switch语句来选择要执行的多个代码块中的一个。

在Go中的switch语句类似于C、C++、Java、JavaScript和PHP中的switch语句。不同之处在于它只执行匹配的case,因此不需要使用break语句。

单一case的switch语法

switch 表达式 {
case x:// 代码块
case y:// 代码块
case z:// ...
default:// 代码块
}

它的工作方式如下:

  1. 表达式被评估一次。
  2. switch表达式的值与每个case的值进行比较。
  3. 如果匹配,则执行相关的代码块。
  4. 默认关键字是可选的。它指定了如果没有匹配的case时要运行的一些代码。

单一case的switch示例

下面的示例使用星期几的数字来计算星期几的名称:

package mainimport ("fmt"
)func main() {day := 4switch day {case 1:fmt.Println("星期一")case 2:fmt.Println("星期二")case 3:fmt.Println("星期三")case 4:fmt.Println("星期四")case 5:fmt.Println("星期五")case 6:fmt.Println("星期六")case 7:fmt.Println("星期日")}
}

结果:

星期四

default关键字

default关键字指定了在没有匹配的case时要运行的一些代码:

package mainimport ("fmt"
)func main() {day := 8switch day {case 1:fmt.Println("星期一")case 2:fmt.Println("星期二")case 3:fmt.Println("星期三")case 4:fmt.Println("星期四")case 5:fmt.Println("星期五")case 6:fmt.Println("星期六")case 7:fmt.Println("星期日")default:fmt.Println("不是工作日")}
}

结果:

不是工作日

所有case值应与switch表达式具有相同的类型。否则,编译器将引发错误。

package mainimport ("fmt"
)func main() {a := 3switch a {case 1:fmt.Println("a是一")case "b":fmt.Println("a是b")}
}

结果:

./prog.go:11:2: 无法将类型为untyped string的"b"用作int类型

多个值的switch语句

在switch语句中,每个case可以有多个值:

语法

switch 表达式 {
case x, y:// 代码块(如果表达式的值是x或y)
case v, w:// 代码块(如果表达式的值是v或w)
case z:// ...
default:// 代码块(如果表达式在任何case中都没有找到)
}

多个值的switch示例

下面的示例使用星期几的数字返回不同的文本:

package mainimport ("fmt"
)func main() {day := 5switch day {case 1, 3, 5:fmt.Println("奇数工作日")case 2, 4:fmt.Println("偶数工作日")case 6, 7:fmt.Println("周末")default:fmt.Println("无效的日期编号")}
}

结果:

奇数工作日

最后

为了方便其他设备和平台的小伙伴观看往期文章:公众号搜索Let us Coding,或者扫描下方二维码,关注公众号,即可获取最新文章。

看完如果觉得有帮助,欢迎点赞、收藏关注
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/215116.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

信息收集小练习

信息收集小练习 本文章无任何恶意攻击行为,演示内容都合规无攻击性 演示如何绕过cdn获取真实ip 使用多地ping该网站 发现有很多ip地址,证明有cdn 此处使用搜索引擎搜索,得到ip 演示nmap工具的常用参数 此处以testfire.net为例 使用多地p…

Netty实现websocket且实现url传参的两种方式(源码分析)

1、先构建基本的netty框架 再下面的代码中我构建了一个最基本的netty实现websocket的框架,其他个性化部分再自行添加。 Slf4j public class TeacherServer {public void teacherStart(int port) throws InterruptedException {NioEventLoopGroup boss new NioEve…

Prometheus环境搭建和认识

Prometheus 环境搭建 1.prometheus 简介 Prometheus是基于go语言开发的一套开源的监控、报警和时间序列数据库的组合,是由SoundCloud公司开发的开源监控系统,Prometheus于2016年加入CNCF(Cloud Native Computing Foundation,云原生计算基金…

前端 vue 面试题(二)

文章目录 如何让vue页面重新渲染组件间通信vue为什么要mutation、 action操作插槽、具名插槽、作用域插槽vue编译使用的是什么库?vue怎么实现treeshakingwebpack实现treeshaking为什么只有es module 能支持 tree shaking mixin 的作用mixin的底层原理nexTick原理vue…

set和map + multiset和multimap(使用+封装(RBTree))

set和map 前言一、使用1. set(1)、模板参数列表(2)、常见构造(3)、find和count(4)、insert和erase(5)、iterator(6)、lower_bound和upper_bound 2. multiset3. map(1)、模板参数列表(2)、构造(3)、modifiers和operations(4)、operator[] 4. multimap 二、封装RBTree迭代器原理R…

python——第十三天

uuid 是通用唯一识别码(Universally Unique identifier)的缩写 UUID是一个128比特的数值 uuid模块: 获取一个128位(比特)的永不重复的数字,当然我们使用的时候会转换为32个的字符串 impor uuud uui…

React + BraftEditor 实现富文本编辑

Braft Editor 是一个基于 React 和 Draft-js 开发的富文本编辑器,提供了丰富的基础功能,如基本文本格式化、列表、链接、图片上传、视频插入等,并且还支持扩展。 首先,确保你已经在项目中安装了 Braft Editor 和它的依赖项&#x…

免费时代结束:百度云加速取消所有免费套餐

我是卢松松,点点上面的头像,欢迎关注我哦! 在网站时代,凭借着“品牌”“SEO”“免费”的优势,百度云加速一跃成为国内最大的CDN服务商。但随着站长时代结束,和网站相关的产品越来越少,收费的名…

Langchain的Agents介绍

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

卷积神经网络(CNN)识别验证码

文章目录 一、前言二、前期工作1. 设置GPU(如果使用的是CPU可以忽略这步)2. 导入数据3. 查看数据4.标签数字化 二、构建一个tf.data.Dataset1.预处理函数2.加载数据3.配置数据 三、搭建网络模型四、编译五、训练六、模型评估七、保存和加载模型八、预测 …

产品经理必备技能:竞品分析!秒懂竞品分析,写竞品分析报告看这篇就够了!

在这个竞争激烈的时代,每一个想要成功的企业不可避免地要进行竞品分析。竞品分析就像是一把锐利的剑,可以帮助我们洞察市场,了解对手,找出自己的优势和弱点。 但这并不是一件容易的事情,需要我们投入大量的时间和精力…

Fiddler 无法抓包手机 https 报文的解决方案来啦!!

解决手机https无法抓包的问题 当你测试App的时候,想要通过Fiddler/Charles等工具抓包看下https请求的数据情况,发现大部分的App都提示网络异常/无数据等等信息 这时候怎么解决呢? 以软件测试面试提刷题APP为例: Fiddler上的显示…