GO语言语法---switch语句

文章目录

  • 基本语法
  • 1. 特点
    • 1.1 不需要break
    • 1.2 表达式可以是任何类型
    • 1.3 省略比较表达式
    • 1.4 多值匹配
    • 1.5 类型switch
    • 1.6 case穿透
    • 1.7 switch后直接声明变量
      • 1.7.1 基本语法
      • 1.7.2 带比较表达式
      • 1.7.3 不带比较表达式
      • 1.7.4 结合类型判断
    • 1.8 switch后的表达式必须与case语句中的表达式类型一致

Go语言的switch语句是一种多分支选择结构,比传统的if-else链更清晰。Go中的switch有一些独特的特性。

基本语法

switch expression {
case value1:// 代码块
case value2:// 代码块
default:// 默认代码块
}

1. 特点

1.1 不需要break

Go的switch case默认不会"贯穿"(fallthrough),执行完一个case后会自动退出switch。因此不需要和C语言一样在每个case语句之后写break。

1.2 表达式可以是任何类型

表达式可以是任何类型,不限于整数或常量。表达式可以是函数,也可以是逻辑判断,设置可以是字符串和浮点数。
代码如下:

	// 表达式为字符串var str = "nihao"switch str {case "hl":fmt.Printf("hl\n")case "nihao":fmt.Printf("nihao\n")default:fmt.Printf("err\n")}// 表达式为浮点数var my_float = 20.3switch my_float {case 20.1:fmt.Printf("20.1\n")case 20.3:fmt.Printf("20.3\n")default:fmt.Printf("err\n")}// 表达式为逻辑判断switch 1 < 2 {case true:fmt.Printf("true\n")case false:fmt.Printf("false\n")default:fmt.Printf("err\n")}// 表达式为函数switch my_func() {case 1:fmt.Printf("1\n")case 2:fmt.Printf("2\n")default:fmt.Printf("err\n")}func my_func() uint8{return 2;}

运行结果:

nihao
20.3
true
2

1.3 省略比较表达式

代码如下:

/* 省略表达式的形式 可代替if-else结构 */var score = 80switch {case score >= 90:fmt.Println("优秀")case score >= 80:fmt.Println("良好")default:fmt.Println("一般")}

运行结果:

良好

1.4 多值匹配

代码如下:

	/* 多值匹配 */var day = 7switch day {case 6, 7:fmt.Println("周末")case 2, 3, 4, 5, 1:fmt.Println("工作日")}

运行结果:

周末

C语言实现多值匹配:

switch (day) {case 1:case 2:case 3:case 4:case 5:printf("工作日\n");break;case 6:case 7:printf("周末\n");break;
}

1.5 类型switch

代码如下:

	/* 类型switch */var x interface{} = "hello"var y interface{} = 5switch x.(type) {case int:fmt.Println("整数")case string:fmt.Println("字符串")default:fmt.Println("未知类型")}switch y.(type) {case int:fmt.Println("整数")case string:fmt.Println("字符串")default:fmt.Println("未知类型")}

运行结果:

字符串
整数

1.6 case穿透

go语言没有break,执行完case语句默认跳出switch语句。但是如果使用fallthrough,可穿透case,即执行完当前case语句不直接跳出switch语句,将不进行判断直接进入下一个case语句执行。
代码如下:

	var n = 1switch n {case 1:fmt.Println("n = 1")fallthroughcase 2:fmt.Println("n <= 2")case 3:fmt.Println("n = 3")}

运行结果:

字符串
n = 1
n <= 2

1.7 switch后直接声明变量

1.7.1 基本语法

switch variable := expression; variable {
case value1:// 使用variable
case value2:// 使用variable
default:// 使用variable
}

1.7.2 带比较表达式

	/* switch后直接声明变量,带比较表达式 */switch num := 5; num {case 1:fmt.Println("One")case 2:fmt.Println("Two")default:fmt.Println("Unknown number:", num)}

运行结果:

Unknown number: 5

1.7.3 不带比较表达式

	/* switch后直接声明变量,不带比较表达式 */switch age := 18; {case age < 18: fmt.Println("未成年")case age >= 18 && age < 60:fmt.Println("成年人")default:fmt.Println("老年人")}

运行结果:

成年人

1.7.4 结合类型判断

	/* switch后直接声明变量,不带比较表达式,结合类型判断 */var x interface{} = "hello"switch v := x.(type) {case int:fmt.Printf("整型: %d\n", v)case string:fmt.Printf("字符串: %s\n", v)default:fmt.Printf("未知类型: %v\n", v)
}

运行结果:

字符串: hello

1.8 switch后的表达式必须与case语句中的表达式类型一致

switch后的表达式和case语句中的表达式是要做比较动作的,因此类型需要报错一致,在
Go语言运算符详解
中的注意事项中提到,不同类型的值不能直接运算,必须显式转换。
如下图代码所示:str是string类型,20.1和20.3是浮点型,因此报错。
在这里插入图片描述

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

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

相关文章

GO语言学习(三)

GO语言学习&#xff08;三&#xff09; GO语言的独特接口可以实现内容和面向对象组织的更加方便&#xff0c;我们从这里来详细的讲解接口&#xff0c;让大家感受一下interface的魅力 interface定义 首先接口是一组方法签名的组合&#xff0c;我们通过接口来实现定义对象的一…

anaconda创建环境出错HTTPS

报错信息 warnings.warn( /home/ti-3/anaconda3/lib/python3.12/site-packages/urllib3/connectionpool.py:1099: InsecureRequestWarning: Unverified HTTPS request is being made to host ‘repo.anaconda.com’. Adding certificate verification is strongly advised. Se…

Android 自定义SnackBar和下滑取消

如何自定义SnackBar 首先我们得了解SnackBar的布局&#xff1a; 之前我看有一些方案是获取内部的contentLayout&#xff0c;然后做一些处理。但是现在已经行不通了&#xff1a; RestrictTo(LIBRARY_GROUP) public static final class SnackbarLayout extends BaseTransientB…

JavaScript性能优化实战(13):性能测试与持续优化

在前面的系列文章中,我们探讨了各种JavaScript性能优化的方法和实战案例。然而,优化工作不应仅是一次性的努力,而应当成为开发流程中的常态。本篇将聚焦于如何建立系统化的性能测试体系,并实现持续的性能优化机制,确保应用长期保持出色的性能表现。 前端性能测试体系构建…

《告别低效签约!智合同如何用AI重构商业“契约时代”》​​——解析智能合约技术的爆发与行业变革

在数字化浪潮奔涌的当下&#xff0c;合同作为商业活动的核心枢纽&#xff0c;正经历着智能化的深度变革。智合同-合同智能应用这一创新模式&#xff0c;犹如一颗璀璨的新星&#xff0c;在商业领域的天空中绽放出独特光芒&#xff0c;深刻改变着人们对合同管理与应用的认知和实践…

塔防战争:动态寻径与成长系统的控制论架构

目录 塔防战争:动态寻径与成长系统的控制论架构引言第一章 炮塔成长系统1.1 属性升级模型1.2 分支进化树第二章 动态路径规划2.1 JPS优化算法2.2 实时障碍更新第三章 敌人行为系统3.1 多波次生成3.2 智能绕障策略第四章 经济平衡系统4.1 资源流动方程4.2 动态定价模型第五章 特…

快速刷机Android10+Root

说明&#xff1a;仅供学习使用&#xff0c;请勿用于非法用途&#xff0c;若有侵权&#xff0c;请联系博主删除 作者&#xff1a;zhu6201976 一、下载android10源码 1.确认手机可刷机范围 比如我的Piexel3机型&#xff0c;支持刷android9-android12 Android源码。 https://de…

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(24):受身形

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(24):受身形 1、前言(1)情况说明(2)工程师的信仰2、知识点(1)うけみけい 受身形(2)復習(ふくしゅう):3、单词(1)日语(2)日语片假名单词4、相近词练习5、单词辨析记录6、总结1、前言 (1)情况说明 自己在今…

Ankr:Web3基础设施的革新者

在Web3技术蓬勃发展的今天&#xff0c;去中心化基础设施的重要性日益凸显。Ankr作为这一领域的佼佼者&#xff0c;凭借其强大的分布式云计算能力和创新的技术解决方案&#xff0c;正在成为推动Web3发展的关键力量。本文将深入探讨Ankr的技术亮点、应用场景以及其在区块链生态中…

【NLP 75、如何通过API调用智谱大模型】

事事忘记&#xff0c;事事等待&#xff0c;事事自愈 —— 25.5.18 一、调用智谱大模型 zhipuai.model_api.invoke()&#xff1a;调用智谱 AI 的大模型&#xff08;如 ChatGLM&#xff09;进行文本生成或推理&#xff0c;支持同步请求。 参数列表 参数名类型是否必需默认值说…

【jvm第0集】jvm学习路线指南

jvm学习路线指南 分享jvm学习路线指南&#xff0c;每个模块深入学习都要花费很多时间&#xff0c;但这个是每个java程序员的必修之路&#xff0c;大家可以跟着我的文章学习&#xff0c;可以不精&#xff0c;但必须懂。因为等你需要解决jvm相关问题的时候&#xff0c;你已经知道…

企业终端设备的安全管控

企业终端设备的安全管控是信息安全体系中的重要环节&#xff0c;涉及从设备准入到数据防护的全生命周期管理。 以下是一套系统化的解决方案&#xff0c;涵盖技术、管理和人员三个维度&#xff1a; 一、终端设备全生命周期管控 设备准入控制 802.1X网络认证&#xff1a;对接企业…

Flink SQL 计算实时指标同比的实现方法

在 Flink SQL 中计算实时指标的同比(Year-on-Year),核心是通过时间窗口划分周期(如日、月、周),并关联当前周期与去年同期的指标值。以下是结合流数据处理特性的具体实现方法,包含数据准备、窗口聚合、历史数据关联等关键步骤。 一、同比的定义与场景 同比指当前周期指…

架构的设计

搭建架构的最低前提 1.设计清晰&#xff1a; 需求文档&#xff1a; 有哪些界面 每个界面提够了哪些功能 这些功能是怎样操作的 会有哪些反馈 2.技术&#xff1a; 写架构的同学&#xff1a;这次项目设计的技术 都要有料及&#xff08;用到的技术有哪些特点 有哪些缺点&…

Mysql varchar类型字段存储的数据末尾带空格,数据过滤不及预期问题

Mysql varchar类型字段存储的数据末尾带空格&#xff0c;数据过滤不及预期问题 引分析 引 最近在项目上遇到一个数据过滤问题&#xff0c;有一批数据&#xff0c;字段末尾多了一个空格&#xff0c;在最后提交的时候被java后端的equals比较校验不匹配&#xff0c;导致业务流程阻…

Debezium TableSchemaBuilder详解

Debezium TableSchemaBuilder详解 1. 类的作用与功能 1.1 核心作用 TableSchemaBuilder是Debezium中负责构建表Schema的核心类,主要功能包括: Schema构建:将数据库表结构转换为Kafka Connect的Schema定义主键处理:生成表的主键Schema值Schema处理:生成表的非主键字段Sc…

P1090 [NOIP 2004 提高组] 合并果子

P1090 [NOIP 2004 提高组] 合并果子 - 洛谷 #include <bits/stdc.h> using namespace std; int main() {int n;cin >> n;priority_queue<int, vector<int>, greater<int>> pq; //小根堆for (int i 1; i < n; i) {int x;cin >> x;pq.pu…

《量子雷达》学习(1) 2025.5.20

《量子雷达》深度解析&#xff1a;理论、技术与未来启示 一、书籍核心内容与理论框架 Marco Lanzagorta的《量子雷达》从量子力学与经典电磁理论的融合视角出发&#xff0c;系统构建了量子雷达探测的理论体系。全书以量子态的传输、散射与检测为核心&#xff0c;重新定义了雷…

支持向量存储:PostgresSQL及pgvector扩展详细安装步骤!老工程接入RAG功能必备!

之前文章和大家分享过&#xff0c;将会出一篇专栏&#xff08;从电脑装ubuntu系统&#xff0c;到安装ubuntu的常用基础软件&#xff1a;jdk、python、node、nginx、maven、supervisor、minio、docker、git、mysql、redis、postgresql、mq、ollama等&#xff09;&#xff0c;目前…

uni-app(2):页面

1 页面简介 uni-app项目中&#xff0c;一个页面就是一个符合Vue SFC规范的 vue 文件。 在 uni-app js 引擎版中&#xff0c;后缀名是.vue文件或.nvue文件。 这些页面均全平台支持&#xff0c;差异在于当 uni-app 发行到App平台时&#xff0c;.vue文件会使用webview进行渲染&…