当前位置: 首页 > news >正文

Golang switch 语句

简介

switch 语句提供了一种简洁的方式来执行多路分支选择

基本使用

  1. 基本语法如下:
switch expression {
case value1:// 当 expression 的值等于 value1 时执行
case value2:// 当 expression 的值等于 value2 
  1. switch 的每个分支自动提供了隐式的 break,意味着只有第一个匹配的 case 会被执行。不需要显式地在每个 case 后面加 break

  2. 如果你想要一个 case 执行后继续检查下一个 case,可以使用 fallthrough 语句:

switch x {
case 1:fmt.Println("x is 1")fallthrough
case 2:fmt.Println("x is 2")fallthrough
case 3:fmt.Println("x is 3")
default:fmt.Println("x is not 1, 2, or 3")
}

在上面的代码中,如果 x 是 1,它会打印出 “x is 1” 和 “x is 2”,因为 fallthrough 语句导致程序继续执行下一个 case

  1. switch 也支持不带表达式的用法,其中每个 case 可以包含一个条件表达式:
y := 20switch {
case y > 10:fmt.Println("y is greater than 10")
case y == 10:fmt.Println("y is exactly 10")
default:fmt.Println("y is less than 10")
}

在这种情况下,switch 语句类似于一系列的 if-else 语句,但其语法更加清晰

  1. switch 也可以包含初始化语句,类似于 if 语句:
switch z := computeValue(); {
case z > 10:fmt.Println("z is greater than 10")
case z == 10:fmt.Println("z is exactly 10")
default:fmt.Println("z is less than 10")
}

常见用法

  • 类型判断: switch 可以用来进行类型判断,在这种情况下,它会匹配一个接口变量的动态类型
var i interface{} = /* 一个值 */switch t := i.(type) {
case string:fmt.Println("i is a string:", t)
case int:fmt.Println("i is an int:", t)
default:fmt.Printf("Unknown type %T\n", t)
}

在这个例子中,i.(type) 用来发现接口变量 i 的动态类型
注意:i.(type) 用于 switch 语句中进行类型断言的类型判断。它只能在 switch 的类型判断分支中使用,不可以单独使用在其他地方

  • 多值匹配: 你可以在一个 case 语句中测试多个值。这可以简化代码,避免编写多个具有相同结果的 case 语句
switch x {
case 1, 2, 3:fmt.Println("x is 1, 2 or 3")
default:fmt.Println("x is not 1, 2, or 3")
}
  • 条件组合: case 语句中可以包含多个条件,这些条件可以是逻辑表达式
switch {
case x > 0 && x < 10:fmt.Println("x is between 1 and 9")
case x == 10 || x == 20:fmt.Println("x is either 10 or 20")
}
  • 无条件的 switch: 无条件的 switch 相当于一个更优雅的 if-else 链
switch {
case score >= 90:fmt.Println("Grade: A")
case score >= 80:fmt.Println("Grade: B")
case score >= 70:fmt.Println("Grade: C")
default:fmt.Println("Grade: F")
}
  • 退出循环: 在循环内部,switch 可以与 break 语句一起使用来退出循环
for {switch {case someCondition():fmt.Println("Condition met")break // 默认只会跳出 switchdefault:fmt.Println("Default case")}break // 退出 for 循环
}

请注意,在这种情况下,break 语句只会退出 switch,而不是循环。要退出循环,需要在外部再次使用 break 语句

  • 跳过当前迭代: 在循环中使用 switch,可以配合 continue 语句来跳过当前迭代
for x := 0; x < 5; x++ {switch {case x%2 == 0:// 跳过偶数continue}fmt.Println("Odd:", x)
}

相关文章:

Golang switch 语句

简介 switch 语句提供了一种简洁的方式来执行多路分支选择 基本使用 基本语法如下&#xff1a; switch expression { case value1:// 当 expression 的值等于 value1 时执行 case value2:// 当 expression 的值等于 value2 switch 的每个分支自动提供了隐式的 break&#x…...

可碧教你C++——位图

本章节是哈希的延申 可碧教你C——哈希http://t.csdnimg.cn/3R8TU 一文详解C——哈希 位图 位图是基于哈希表的原理产生的一种新的container——bitset 基于哈希映射的原理&#xff0c;我们在查找的时候&#xff0c;可以直接去定址到元素的具体位置&#xff0c;然后直接访问该…...

2024年虚拟DOM技术将何去何从?

从诞生之初谈起&#xff0c;从命令式到声明式&#xff0c;Web开发的演变之路 Web开发的起源与jQuery的统治 在Web开发的早期阶段&#xff0c;操作DOM元素主要依赖命令式编程。当时&#xff0c;jQuery因其易用性而广受欢迎。使用jQuery&#xff0c;开发者通过具体的命令操作DOM&…...

基于51单片机的恒温淋浴器控制电路设计

标题&#xff1a;基于51单片机的智能恒温淋浴器控制系统设计与实现 摘要&#xff1a; 本论文主要探讨了一种基于STC89C51单片机为核心控制器的恒温淋浴器控制系统的详细设计与实现。系统通过集成温度传感器实时监测水温&#xff0c;结合PID算法精确控制加热元件工作状态&#…...

【redis】redis的bind配置

在配置文件redis.conf中&#xff0c;默认的bind 接口是127.0.0.1&#xff0c;也就是本地回环地址。这样的话&#xff0c;访问redis服务只能通过本机的客户端连接&#xff0c;而无法通过远程连接&#xff0c; 这样可以避免将redis服务暴露于危险的网络环境中&#xff0c;防止一些…...

C++ 继承

目录 一、继承的概念及定义 1、继承的概念 2、继承定义 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 五、继承与友元 六、继承与静态成员 七、复杂的菱形继承及菱形虚拟继承 1、菱形继承 2、虚拟继承 3、例题 八、继承的总结和反思…...

了解ASP.NET Core 中的文件提供程序

写在前面 ASP.NET Core 通过文件提供程序来抽象化文件系统访问。分为物理文件提供程序(PhysicalFileProvider)和清单嵌入的文件提供程序(ManifestEmbeddedFileProvider)还有复合文件提供程序(CompositeFileProvider )&#xff1b;其中PhysicalFileProvider 提供对物理文件系统…...

竞赛保研 基于深度学习的人脸性别年龄识别 - 图像识别 opencv

文章目录 0 前言1 课题描述2 实现效果3 算法实现原理3.1 数据集3.2 深度学习识别算法3.3 特征提取主干网络3.4 总体实现流程 4 具体实现4.1 预训练数据格式4.2 部分实现代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 毕业设计…...

JavaScript音视频,JavaScript简单获取电脑摄像头画面并播放

前言 本章实现JavaScript简单获取电脑摄像头画面并播放的功能 兼容性(不支持Node.js) 需要注意的是,由于涉及到用户的隐私和安全,获取用户媒体设备需要用户的明确同意,并且可能需要在用户的浏览器中启用相关的权限。在某些浏览器中,可能需要用户手动开启摄像头权限。 …...

《JVM由浅入深学习【五】 2024-01-08》JVM由简入深学习提升分享

目录 JVM何时会发生堆内存溢出&#xff1f;1. 堆内存溢出的定义2. 内存泄漏的原因3. 堆内存溢出的常见场景4. JVM参数调优5. 实际案例分析 JVM如何判断对象可以回收1.可达性分析的基本思路2.实际案例3.可以被回收的对象4.拓展&#xff0c; 谈谈 Java 中不同的引用类型? 结语感…...

FastDFS之快速入门、上手

知识概念 分布式文件系统 通过计算机网络将各个物理存储资源连接起来。通过分布式文件系统&#xff0c;将网络上任意资源以逻辑上的树形结构展现&#xff0c;让用户访问网络上的共享文件更见简便。 文件存储的变迁&#xff1a; 直连存储&#xff1a;直接连接与存储&#xf…...

Vue 中的 ref 与 reactive:让你的应用更具响应性(中)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…...

【数据库基础】Mysql与Redis的区别

看到一篇不错的关于“Mysql与Redis的区别”的文章&#xff0c;转过来记录下~ 文章目录 一、数据库类型二、运行机制三、什么是缓存数据库呢&#xff1f;四、优缺点比较五、区别总结六、数据可以全部直接用Redis储存吗&#xff1f;参考资料 一、数据库类型 Redis&#xff1a;NOS…...

JVM工作原理与实战(六):类的生命周期-连接阶段

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、类的生命周期 1.加载&#xff08;Loading&#xff09; 2.连接&#xff08;Linking&#xff09; 3.初始化&#xff08;Initialization&#xff09; 4.使用&#xff08;Using&…...

【OCR】 - Tesseract OCR在Windows系统中安装

Tesseract OCR 在Windows环境下安装Tesseract OCR&#xff08;Optical Character Recognition&#xff09;通常包括以下几个步骤&#xff1a; 下载Tesseract 访问Tesseract的GitHub发布页面&#xff1a;https://github.com/tesseract-ocr/tesseract/releases找到适合你操作系…...

YOLOv8改进 | 损失函数篇 | SlideLoss、FocalLoss分类损失函数助力细节涨点(全网最全)

一、本文介绍 本文给大家带来的是分类损失 SlideLoss、VFLoss、FocalLoss损失函数,我们之前看那的那些IoU都是边界框回归损失,和本文的修改内容并不冲突,所以大家可以知道损失函数分为两种一种是分类损失另一种是边界框回归损失,上一篇文章里面我们总结了过去百分之九十的…...

计算机网络试题——填空题(附答案)

在OSI模型中&#xff0c;第一层是____________层。 答案&#xff1a;物理&#xff08;Physical&#xff09; TCP协议是一种_____________连接的协议。 答案&#xff1a;面向连接&#xff08;Connection-oriented&#xff09; IPv6地址的位数是____________。 答案&#xff1a;1…...

第二证券:股票私募仓位指数创近八周新高

1月8日&#xff0c;A股几大首要指数全线收跌&#xff0c;上证指数收于日内最低点2887.54点&#xff0c;间隔上一年5月份的阶段高点3418.95点现已跌去了15.54%。 不过&#xff0c;虽然商场仍未清晰止跌&#xff0c;私募基金们却现已进场“抄底”。私募排排网最新发布的私募仓位…...

35-javascript基础,引入方式;变量命名规范

html分为三部分&#xff1b;结构html&#xff0c;表现css&#xff0c;行为js&#xff1b;js就是javascript js包含三部分&#xff1a; ECMAScript&#xff1a;简称ES&#xff0c;ES5&#xff0c;ES6核心语法 DOM&#xff1a;获取和操作html元素的标准方法&#xff1b;BOM&am…...

笔试案例2

文章目录 1、笔试案例22、思维导图 1、笔试案例2 09&#xff09;查询学过「张三」老师授课的同学的信息 selects.*,c.cname,t.tname,sc.score from t_mysql_teacher t, t_mysql_course c, t_mysql_student s, t_mysql_score sc where t.tidc.cid and c.cidsc.cid and sc.sids…...

【嵌入式-网络编程】vmware中使用UDP广播失败问题

问题描述&#xff1a; 自己在vmware中搭建了2台虚拟机&#xff0c;虚拟机A向虚拟机A和虚拟机B发送广播信息&#xff0c;接收端在虚拟机A和虚拟机B&#xff0c;这个时候&#xff0c;由于没配置sin.sin_addr.s_addr htonl(INADDR_ANY);&#xff0c;而是配置的inet_pton(AF_INET,…...

2020年认证杯SPSSPRO杯数学建模D题(第二阶段)让电脑桌面飞起来全过程文档及程序

2020年认证杯SPSSPRO杯数学建模 D题 让电脑桌面飞起来 原题再现&#xff1a; 对于一些必须每天使用电脑工作的白领来说&#xff0c;电脑桌面有着非常特殊的意义&#xff0c;通常一些频繁使用或者比较重要的图标会一直保留在桌面上&#xff0c;但是随着时间的推移&#xff0c;…...

vue3 修饰符大全(近万字长文)

系列文章目录 TypeScript 从入门到进阶专栏 文章目录 系列文章目录前言一、事件修饰符&#xff08;Event Modifiers&#xff09;1、.stop&#xff08;阻止事件冒泡&#xff09;2、.prevent&#xff08;阻止事件的默认行为&#xff09;3、.capture&#xff08;使用事件捕获模式…...

HarmonyOS@State装饰器:组件内状态

State装饰器&#xff1a;组件内状态 State装饰的变量&#xff0c;或称为状态变量&#xff0c;一旦变量拥有了状态属性&#xff0c;就和自定义组件的渲染绑定起来。当状态改变时&#xff0c;UI会发生对应的渲染改变。 在状态变量相关装饰器中&#xff0c;State是最基础的&…...

如何让GPT支持中文

上一篇已经讲解了如何构建自己的私人GPT&#xff0c;这一篇主要讲如何让GPT支持中文。 privateGPT 本地部署目前只支持基于llama.cpp 的 gguf格式模型&#xff0c;GGUF 是 llama.cpp 团队于 2023 年 8 月 21 日推出的一种新格式。它是 GGML 的替代品&#xff0c;llama.cpp 不再…...

使用开源通义千问模型(Qwen)搭建自己的大模型服务

目标 1、使用开源的大模型服务搭建属于自己的模型服务&#xff1b; 2、调优自己的大模型&#xff1b; 选型 采用通义千问模型&#xff0c;https://github.com/QwenLM/Qwen 步骤 1、下载模型文件 开源模型库&#xff1a;https://www.modelscope.cn/models mkdir -p /data/…...

Java工程师面试题解析与深度探讨

Java工程师面试题解析与深度探讨 第一部分&#xff1a;引言 Java作为一门广泛应用的编程语言&#xff0c;拥有庞大的生态系统&#xff0c;Java工程师因此成为众多企业追逐的目标。而在Java工程师的招聘中&#xff0c;面试是了解候选人技能和经验的核心环节。本文将深入探讨一…...

Linux下安装JET2

0. 说明&#xff1a; JET2是一个基于Joint Evolutionary Trees的利用序列和结构信息预测蛋白质界面的软件&#xff0c;详情见: http://www.lcqb.upmc.fr/JET2/JET2.html&#xff0c;http://www.lgm.upmc.fr/JET/JET.html 和 https://doi.org/10.1371/journal.pcbi.1004580 本…...

【PostgreSQL】表管理-表继承

PostgreSQL 表继承 PostgreSQL 实现了表继承&#xff0c;这对于数据库设计人员来说是一个有用的工具。&#xff08;SQL&#xff1a;1999 及更高版本定义了类型继承功能&#xff0c;该功能在许多方面与此处描述的功能不同。 让我们从一个例子开始&#xff1a;假设我们正在尝试…...

Dijkstra算法——邻接矩阵实现+路径记录

本文是在下面这篇文章的基础上做了一些补充&#xff0c;增加了路径记录的功能。具体Dijkstra的实现过程可以参考下面的这篇文章。 [jarvan&#xff1a;Dijkstra算法详解 通俗易懂](Dijkstra算法详解 通俗易懂 - jarvan的文章 - 知乎 https://zhuanlan.zhihu.com/p/338414118) …...

公信域名和网站建设是一样的吗/广州新闻播报

转自:http://www.w3school.com.cn/jsref/dom_obj_event.asp Event 对象 Event 对象代表事件的状态&#xff0c;比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。 事件通常与函数结合使用&#xff0c;函数不会在事件发生前被执行&#xff01; IE 属性 除…...

网站设计注意因素/免费浏览网站推广

安利 我如何零基础转行成为一个自信的前端 虽然我只是个做app的&#xff0c;里面很多东西看了没多大用&#xff0c;但我主要学习的是别人的习惯。我现在空闲时间算比较多的&#xff0c;平时想学一些东西的时候&#xff0c;却总是被(自己)打扰。后来就用了里面提到的番茄时间&am…...

网站登录系统源码/最有效的免费推广方法

if else 语句基本语法格式if(判断条件1){要执行的操作1;}else if(判断条件2){要执行的操作2;}else if(判断条件3){要执行的操作3;}else{不满足以上所有条件的时候需要执行的操作;}简单解说●if语句后面如果只有一条语句需要执行&#xff0c;可以省略if判断后面的{}&#xff0c;…...

同一个域名两个网站/网站免费推广的方法

是一个机构&#xff0c;它为常用坐标系做了编号&#xff0c;有了编号编程时候直接使用编号即可定义坐标系&#xff0c;常用坐标系及其EPSG编号有&#xff1a; EPSG:4326 地理坐标系&#xff0c;坐标单位为经纬度。它是以地球质心为椭球中心的世界地理坐标系&#xff0c;GPS用…...

如何用手机建立网站/网络公司seo教程

热爱spring源码的同学应该知道MergedBeanDefinitionPostProcessor这个接口&#xff0c;这个接口对Autowired和Value的支持起到了至关重要的作用。当某个bean在实例化的时候就会调到所有的实现了MergedBeanDefinitionPostProcessor接口的实例。其中就有一个非常关键的类&#xf…...

自建小程序商城/济南百度推广优化

算法步骤申请空间&#xff0c;使其大小为两个已经排序序列之和&#xff0c;该空间用来存放合并后的序列&#xff1b;设定两个指针&#xff0c;最初位置分别为两个已经排序序列的起始位置&#xff1b;比较两个指针所指向的元素&#xff0c;选择相对小的元素放入到合并空间&#…...