GO语言语法---switch语句

news2025/5/19 20:22:03

文章目录

  • 基本语法
  • 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.3
	switch 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 = 80

	switch {
		case score >= 90:
    		fmt.Println("优秀")
		case score >= 80:
    		fmt.Println("良好")
		default:
    		fmt.Println("一般")
	}

运行结果:

良好

1.4 多值匹配

代码如下:

	/* 多值匹配 */
	var day = 7

	switch 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{} = 5

	switch 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 = 1
	switch n {
		case 1:
    		fmt.Println("n = 1")
    		fallthrough
		case 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.coloradmin.cn/o/2379510.html

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

相关文章

开疆智能Profient转ModbusTCP网关连接ABB机器人MODBUS TCP通讯案例

本案例是通过开疆智能Profinet转ModbusTCP网关将西门子PLC与ABB机器人进行通讯 因西门子PLC采用Profinet协议&#xff0c;而ABB机器人采用的是ModbusTCP通讯。故采取此种方案。 配置过程&#xff1a; 1.MODBUS/TCP基于以太网&#xff0c;故ABB机器人在使用时需要有616-1PCIN…

解决qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed

可以参考&#xff1a;解决qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed-CSDN博客 讲的是程序执行目录下可能缺少了&#xff1a; libssl-1_1-x64.dll 和 libcrypto-1_1-x64.dll 库文件&#xff0c;将其复制到可执行文件exe的同级目录下即可…

Text2SQL:自助式数据报表开发---0517

Text2SQL技术 早期阶段&#xff1a;依赖于人工编写的规则模板来匹配自然语言和SQL语句之间的对应关系 机器学习阶段&#xff1a;采用序列到序列模型等机器学习方法来学习自然语言与SQL之间的关系 LLM阶段&#xff1a;借助LLM强大的语言理解和代码生成能力&#xff0c;利用提示…

使用Visual Studio将C#程序发布为.exe文件

说明 .exe 是可执行文件&#xff08;Executable File&#xff09;的扩展名。这类文件包含计算机可以直接运行的机器代码指令&#xff0c;通常由编程语言&#xff08;如 C、C、C#、Python 等&#xff09;编译或打包生成。可以用于执行自动化操作&#xff08;执行脚本或批处理操…

React Flow 边的基础知识与示例:从基本属性到代码实例详解

本文为《React Agent&#xff1a;从零开始构建 AI 智能体》专栏系列文章。 专栏地址&#xff1a;https://blog.csdn.net/suiyingy/category_12933485.html。项目地址&#xff1a;https://gitee.com/fgai/react-agent&#xff08;含完整代码示​例与实战源&#xff09;。完整介绍…

oracle 资源管理器的使用

14.8.2资源管理器的使用 资源管理器控制CPU资源使用说明&#xff1a;  第一种分配方法&#xff1a;EMPHASIS CPU 分配方法确定在资源计划中对不同使用者组中的会话的重视程度。CPU占用率的分配级别为从1 到8&#xff0c;级别1 的优先级最高。百分比指定如何将CPU 资源分配给每…

贝叶斯优化Transformer融合支持向量机多变量回归预测,附相关性气泡图、散点密度图,Matlab实现

贝叶斯优化Transformer融合支持向量机多变量回归预测&#xff0c;附相关性气泡图、散点密度图&#xff0c;Matlab实现 目录 贝叶斯优化Transformer融合支持向量机多变量回归预测&#xff0c;附相关性气泡图、散点密度图&#xff0c;Matlab实现效果一览基本介绍程序设计参考资料…

Docker配置SRS服务器 ,ffmpeg使用rtmp协议推流+vlc拉流

目录 演示视频 前期配置 Docker配置 ffmpeg配置 vlc配置 下载并运行 SRS 服务 推拉流流程实现 演示视频 2025-05-18 21-48-01 前期配置 Docker配置 运行 SRS 建议使用 Docker 配置 Docker 请移步&#xff1a; 一篇就够&#xff01;Windows上Docker Desktop安装 汉化完整指…

一个stm32工程从底层上都需要由哪些文件构成

原文链接&#xff1a;https://kashima19960.github.io/2025/05/17/stm32/一个stm32工程从底层上都需要由哪些文件构成/ 前言 我最近因为做课设要用到stm32&#xff0c;所以去找了一些开源的stm32工程来看看&#xff0c;然后发现现在新版的keil mdk对于环境的配置跟以前 相比发…

[Mac] 开发环境部署工具ServBay 1.12.2

[Mac] 开发环境部署工具ServBay 链接&#xff1a;https://pan.xunlei.com/s/VOQS0LDsC_J6XU4p-R6voF6YA1?pwdnbyg# 非常给力的本地 Web 开发/测试环境工具&#xff1a;ServBay。之前我们本地搭个 PHP MySQL Nginx 环境&#xff0c;或者搞个 PHP web 环境啥的&#xff0c;不…

商城小程序源码介绍

今天要为大家介绍一款基于ThinkPHP、FastAdmin以及UniApp开发的商城小程序源码&#xff0c;这款源码在设计和功能上都有不俗的表现&#xff0c;非常适合想要搭建线上商城的开发者。 该源码采用了ThinkPHP作为后端框架&#xff0c;利用其强大的性能和灵活性&#xff0c;保障了系…

科技项目验收测试对软件产品和企业分别有哪些好处?

科技项目验收测试是指在项目的开发周期结束后&#xff0c;针对项目成果进行的一系列验证和确认活动。其目的是确保终交付的产品或系统符合预先设定的需求和标准。验收测试通常包括功能测试、性能测试、安全测试等多个方面&#xff0c;帮助企业评估软件在实际应用中的表现。 科…

汽车零部件冲压车间MES一体机解决方案

在当前制造业升级的大背景下&#xff0c;提升生产效率、实现精细化管理已成为企业竞争力的关键。特别是在汽车零部件制造领域&#xff0c;冲压车间作为生产流程中的重要一环&#xff0c;其生产数据的实时采集与分析对于确保产品质量、优化生产节拍、降低运营成本至关重要。今天…

hysAnalyser 从MPEG-TS导出ES功能说明

摘要 hysAnalyser 是一款特色的 MPEG-TS 数据分析工具。本文主要介绍了 hysAnalyser 从MPEG-TS 中导出选定的 ES 或 PES 功能(版本v1.0.003)&#xff0c;以便用户知悉和掌握这些功能&#xff0c;帮助分析和解决各种遇到ES或PES相关的实际问题。hysAnalyser 支持主流的MP1/MP2/…

家里wifi不能上网或莫名跳转到赌博及色情网站就是域名被劫持、DNS被污染了

文章目录 定义上网过程域名被劫持可能阶段案例排查工具 解决方法清除系统DNS缓存查看DNS缓存清除DNS缓存 登录路由器&#xff0c;设置DNS可用的DNS地址&#xff1a; 找网络运营商报警 定义 DNS&#xff08;Domain Name System&#xff0c;域名系统&#xff09;劫持&#xff0c…

基于SSM实现的健身房系统功能实现十六

一、前言介绍&#xff1a; 1.1 项目摘要 随着社会的快速发展和人们健康意识的不断提升&#xff0c;健身行业也在迅速扩展。越来越多的人加入到健身行列&#xff0c;健身房的数量也在不断增加。这种趋势使得健身房的管理变得越来越复杂&#xff0c;传统的手工或部分自动化的管…

【Java微服务组件】分布式协调P1-数据共享中心简单设计与实现

欢迎来到啾啾的博客&#x1f431;。 记录学习点滴。分享工作思考和实用技巧&#xff0c;偶尔也分享一些杂谈&#x1f4ac;。 欢迎评论交流&#xff0c;感谢您的阅读&#x1f604;。 目录 引言设计一个共享数据中心选择数据模型键值对设计 数据可靠性设计持久化快照 &#xff08…

cursor/vscode启动项目connect ETIMEDOUT 127.0.0.1:xx

现象&#xff1a; 上午正常使用cursor/vscode&#xff0c;因为需要写前端安装了nodejs16.20和vue2&#xff0c;结果下午启动前端服务无法访问&#xff0c;浏览器一直转圈。接着测试运行最简单的flask服务&#xff0c;vscode报错connect ETIMEDOUT 127.0.0.1:xx&#xff0c;要么…

兼顾长、短视频任务的无人机具身理解!AirVista-II:面向动态场景语义理解的无人机具身智能体系统

作者&#xff1a;Fei Lin 1 ^{1} 1, Yonglin Tian 2 ^{2} 2, Tengchao Zhang 1 ^{1} 1, Jun Huang 1 ^{1} 1, Sangtian Guan 1 ^{1} 1, and Fei-Yue Wang 2 , 1 ^{2,1} 2,1单位&#xff1a; 1 ^{1} 1澳门科技大学创新工程学院工程科学系&#xff0c; 2 ^{2} 2中科院自动化研究所…

20250515配置联想笔记本电脑IdeaPad总是使用独立显卡的步骤

20250515配置联想笔记本电脑IdeaPad总是使用独立显卡的步骤 2025/5/15 19:55 百度&#xff1a;intel 集成显卡 NVIDIA 配置成为 总是用独立显卡 百度为您找到以下结果 ?要将Intel集成显卡和NVIDIA独立显卡配置为总是使用独立显卡&#xff0c;可以通过以下步骤实现?&#xff…