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

Go语言switch语句

Go语言中,switch,是一个高度灵活,其功能强大的控制结构,相比较Java中的switch,更受到语言重视。

目录

      • 1.基础用法
      • 2.多值匹配
      • 3.不指定表达式的 switch
      • 4.使用 fallthrough 强制进入下一个分支
      • 5.使用类型断言的 switch
      • 6.嵌套 switch
      • 7. switch 用于优化复杂条件
      • 总结


它不仅可以替代多层 if-else,还能在更复杂的逻辑中灵活应用。下面详细讲解 switch 的深度用法,并结合示例展示如何充分发挥其功能。

1.基础用法

switch 的基础语法用来匹配单个变量的值:

package mainimport "fmt"func main(){x:=2switch x{case 1:fmt.println("x 等于 1");case 2:fmt.println("x 等于 2");case 3:fmt.println("x 等于 3");}
}

2.多值匹配

每个case分支可以匹配多个值,使用逗号分隔。

package mainimport "fmt"func main(){day:="Tuesday"switch day{case "Mondey","Tuesday","Wednesday":fmt.Println("这是工作日")case "Saturday","Sunday":fmt.Println("这是周末")default:fmt.Println("无效的天数")}}

3.不指定表达式的 switch

Go中的switch可以省略表达式,直接用作条件分支判断,这类似于多层if-else

package mainimport "fmt"func main(){x:=1switch{case x > 0:fmt.Println("正数")case x < 0:fmt.Println("负数")default:fmt.Println("0")}
}

4.使用 fallthrough 强制进入下一个分支

默认情况下,swich在匹配到一个case后会退出。如果想继续执行下一个case,可以使用 fallthrough 关键字。

package mainimport "fmt"func main() {switch x := 1; x {case 1:fmt.Println("x 是 1")fallthroughcase 2:fmt.Println("这行会执行,因为 fallthrough")default:fmt.Println("默认分支")}
}
注意:fallthrough 不会重新检查条件,仅执行下一个分支。

5.使用类型断言的 switch

switch 可以配合类型断言使用,用来处理接口的不同类型

package mainimport "fmt"func main() {var i interface{} = 42 // i 可以是任意类型switch v := i.(type) {case int:fmt.Printf("i 是 int,值为 %d\n", v)case string:fmt.Printf("i 是 string,值为 %s\n", v)case bool:fmt.Printf("i 是 bool,值为 %t\n", v)default:fmt.Printf("未知类型: %T\n", v)}
}

6.嵌套 switch

switch 中嵌套另一个switch以实现更复杂的条件逻辑。

package mainimport "fmt"func main() {x := 10switch {case x > 0:fmt.Println("x 是正数")switch {case x%2 == 0:fmt.Println("x 是偶数")default:fmt.Println("x 是奇数")}case x < 0:fmt.Println("x 是负数")default:fmt.Println("x 是零")}
}

7. switch 用于优化复杂条件

当条件分支过多时,用 switch 可以避免冗长的 if-else 语句,提高代码可读性。

package mainimport "fmt"func main() {grade := 85switch {case grade >= 90:fmt.Println("优秀")case grade >= 75:fmt.Println("良好")case grade >= 60:fmt.Println("及格")default:fmt.Println("不及格")}
}

总结

通过灵活使用 switch,可以使代码更清晰、更易维护,是 Go 中不可或缺的控制结构之一。
  • 简单匹配:直接匹配变量值。
  • 多值匹配:每个 case 可以匹配多个值。
  • 条件判断:不指定表达式时,switch 等价于多层 if-else。
  • 类型判断:结合类型断言实现不同类型处理。
  • 灵活控制:使用 fallthrough 控制分支流转。

在结尾处,我就替大家回答一个疑惑。
Java 中 switch 不是不太支持使用吗?为什么在 Go 中却备受重视?

Go 的哲学:简单直接

  • Go语言倡导简单性与直接性,尽量避免复杂的继承和多态结构。
  • switch 被设计得功能很强大,适用于多种场景(值判断、逻辑分支、类型断言),因此在 Go 中更受重视。

Java 的哲学:面向对象优先

  • Java 是典型的面向对象语言,设计中更强调通过类和接口解决问题。
  • 对于复杂的条件判断,Java 倾向于使用多态或设计模式,switch 的使用场景相对有限。

希望大家收获,到此结束喽
( ̄︶ ̄)↗ 高抬贵手,一键三联。略略

相关文章:

Go语言switch语句

在Go语言中&#xff0c;switch&#xff0c;是一个高度灵活&#xff0c;其功能强大的控制结构&#xff0c;相比较Java中的switch&#xff0c;更受到语言重视。 目录 1.基础用法2.多值匹配3.不指定表达式的 switch4.使用 fallthrough 强制进入下一个分支5.使用类型断言的 switch…...

JavaScript DOM使用

DOM Document Object Model 简单而言&#xff0c;就是JavaScript将HTML文档的各个组成部分封装为对象。 封装的对象分别为&#xff1a; Document&#xff1a;整个HTML的文档对象 Element&#xff1a;元素对象&#xff08;也就是HTML中的标签&#xff09; Attribute&#xff1a;…...

人工智能|计算机视觉——微表情识别(Micro expression recognition)的研究现状

一、简述 微表情是一种特殊的面部表情,与普通的表情相比,微表情主要有以下特点: 持续时间短,通常只有1/25s~1/3s;动作强度低,难以察觉;在无意识状态下产生,通常难以掩饰或伪装;对微表情的分析通常需要在视频中,而普通表情在图像中就可以分析。由于微表情在无意识状态…...

耿恭坚守城池的方法

疏勒城之战中&#xff0c;耿恭坚守城池的方法主要有以下几点&#xff1a; 选择有利地势&#xff1a;耿恭深知疏勒城依山傍水、地势险要&#xff0c;易守难攻&#xff0c;于是果断放弃金满城&#xff0c;移师至疏勒城据守&#xff0c;为长期坚守创造了良好的地理条件.运用心理战…...

小兔鲜项目总结——项目亮点

目录 1、基于业务的逻辑组件拆分思想2、长页面吸顶交互的实现3、自定义图片懒加载指令并封装为插件4、画板插槽组件等业务通用组件封装5、通用逻辑函数的封装6、列表无限加载7、路由缓存问题的处理 小兔鲜项目其实在暑假之前就已经做完了&#xff0c;但是一直没有空做总结&…...

Cesium的ClearCommand的流程

ClearCommand是在每帧渲染前可以将显存的一些状态置为初始值&#xff0c;就如同把擦黑板。当然也包括在绘制过程中擦掉部分的数据&#xff0c;就如同画家在开始绘制的时候会画导览线&#xff08;如透视线&#xff09;&#xff0c;轮廓出来后这些导览线就会被擦除。 我画了一个…...

Fakelocation Server服务器/专业版 ubuntu

前言:需要Ubuntu系统 Fakelocation开源文件系统需求 Ubuntu | Fakelocation | 任务一 任务一 更新Ubuntu&#xff08;安装下载不再赘述&#xff09; sudo -i # 提权 sudo apt update # 更新软件包列表 sudo apt upgrade # 升级已安装的软…...

Spring AI Alibaba 快速入门

Spring AI Alibaba 实现了与阿里云通义模型的完整适配&#xff0c;接下来&#xff0c;我们将学习如何使用 spring ai alibaba 开发一个基于通义模型服务的智能聊天应用。 一、快速体验示例 注意&#xff1a;因为 Spring AI Alibaba 基于 Spring Boot 3.x 开发&#xff0c;因此…...

Docker Registry(镜像仓库)详解

Docker Registry&#xff08;镜像仓库&#xff09;详解 Docker Registry&#xff0c;即Docker镜像仓库&#xff0c;是Docker生态系统中一个至关重要的组件。它负责存储、管理和分发Docker镜像&#xff0c;为Docker容器提供镜像资源。本文将深入探讨Docker Registry的功能、结构…...

RTOS学习笔记---“二值信号量”和“互斥信号量”

在实时操作系统&#xff08;RTOS&#xff09;中&#xff0c;“二值信号量”和“互斥信号量”是两种常见的同步机制&#xff0c;用于线程之间的协调与资源管理。尽管它们有相似之处&#xff0c;都基于信号量概念&#xff0c;但它们的用途和行为存在重要区别。 1. 二值信号量&…...

Oracle-物化视图基本操作

-- 物化视图 -- 与普通视图的区别&#xff1a;真实存在数据的 普通视图的数据在基表 物化视图看成是, 一个定时运行的计算JOB一个存计算结果的表 创建时生成数据&#xff1a; 分为两种&#xff1a;build immediate 和 build deferred&#xff0c; build immediate是在创…...

(功能测试)测试报告

其中的统计分析和测试结果确认是必须要有的&#xff1b; 测试过程回顾&#xff1a;测试的时间和阶段&#xff0c;是否出现延期&#xff0c;与预期的任务计划是否匹配&#xff1b; &#xff01;统计分析&#xff1a;统计写多少用例&#xff0c;用例覆盖情况如何&#xff08;100%…...

【LeetCode每日一题】——746.使用最小花费爬楼梯

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时空频度】九【代码实现】十【提交结果】 一【题目类别】 数组 二【题目难度】 简单 三【题目编号】 746.使用最小花费爬楼梯 四【题目描述】 给你一…...

程序里sendStringParametersAsUnicode=true的配置导致sql server cpu使用率高问题处理

一 问题描述 近期生产环境几台sql server从库cpu使用率总是打满&#xff0c;发现抓的带变量值的慢sql&#xff0c;手动代入变量值执行并不慢&#xff0c;秒级返回&#xff0c;不知道问题出在哪里。 二 问题排查 用扩展事件或者sql profiler抓慢sql&#xff0c;抓到了变量值&…...

Vue3 el-table 默认选中 传入的数组

一、效果&#xff1a; 二、官网是VUE2 现更改为Vue3写法 <template><el-table:data"tableData"border striperow-key"id"ref"tableRef":cell-style"{ text-align: center }":header-cell-style"{background: #b7babd…...

最后一个单词的长度

题目详情&#xff1a; 解题思路&#xff1a; 用两个变量分别存储当前值和上次值&#xff0c;就可保证当前移动时记录字符个数&#xff0c;当遇到空格时&#xff0c;这次值保存到上次值&#xff0c;并清空。 代码解析&#xff1a; /* 最后一个单词的长度 */ #include <st…...

2024-11-19 kron积

若A[a11 a12; a21 a22]; B[b11 b12; b21 b22]; 则C[a11*b11 a12*b11 a21*b11 a22*b11; a11*b12 a12*b12 a21*b12 a22*b12; a11*b21 a12*b21 a21*b21 a22*b21; a11*b22 a12*b22 a21*b22 a22*b22] 用MATLAB实现 方法1&#xff1a; A [a11 a12; a21 a22]; B [b11 b12; b21 b22]…...

Redis ⽀持哪⼏种数据类型?适⽤场景,底层结构

目录 Redis 数据类型 一、String&#xff08;字符串&#xff09; 二、Hash&#xff08;哈希&#xff09; 三、List&#xff08;列表&#xff09; 四、Set&#xff08;集合&#xff09; 五、ZSet(sorted set&#xff1a;有序集合) 六、BitMap 七、HyperLogLog 八、GEO …...

树莓派2 安装raspberry os 并修改成固定ip

安装 安装raspberry os 没啥说的&#xff0c;到树莓派官网&#xff0c;下载制作启动映像盘的软件&#xff1a; https://www.raspberrypi.com/software/ 下载后&#xff0c;直接安装该软件&#xff0c;然后运行&#xff0c;选择好开发板的型号和操作系统型号&#xff0c;按照…...

11月第3周AI资讯

阅读时间:3-4min 更新时间:2024.9.9-2024.9.13 目录 DIAMOND:扩散模型在世界构建中的应用 阿里云推出Qwen2.5-Turbo:高效长文本处理,性价比卓越 微软:AI已实现几乎无限的记忆 Comfyui_Object_Migration一致性换衣模型 DeepSeek发布R1-Lite-Preview:推理AI竞争愈发…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

Vue3中的computer和watch

computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...

向量几何的二元性:叉乘模长与内积投影的深层联系

在数学与物理的空间世界中&#xff0c;向量运算构成了理解几何结构的基石。叉乘&#xff08;外积&#xff09;与点积&#xff08;内积&#xff09;作为向量代数的两大支柱&#xff0c;表面上呈现出截然不同的几何意义与代数形式&#xff0c;却在深层次上揭示了向量间相互作用的…...

ArcGIS Pro+ArcGIS给你的地图加上北回归线!

今天来看ArcGIS Pro和ArcGIS中如何给制作的中国地图或者其他大范围地图加上北回归线。 我们将在ArcGIS Pro和ArcGIS中一同介绍。 1 ArcGIS Pro中设置北回归线 1、在ArcGIS Pro中初步设置好经纬格网等&#xff0c;设置经线、纬线都以10间隔显示。 2、需要插入背会归线&#xf…...

DAY 45 超大力王爱学Python

来自超大力王的友情提示&#xff1a;在用tensordoard的时候一定一定要用绝对位置&#xff0c;例如&#xff1a;tensorboard --logdir"D:\代码\archive (1)\runs\cifar10_mlp_experiment_2" 不然读取不了数据 知识点回顾&#xff1a; tensorboard的发展历史和原理tens…...

goreplay

1.github地址 https://github.com/buger/goreplay 2.简单介绍 GoReplay 是一个开源的网络监控工具&#xff0c;可以记录用户的实时流量并将其用于镜像、负载测试、监控和详细分析。 3.出现背景 随着应用程序的增长&#xff0c;测试它所需的工作量也会呈指数级增长。GoRepl…...