【Golang】switch 语句和select 语句有什么区别?

switch 语句和 select 语句是 Go 语言中的两种不同的控制流语句,它们有以下区别:

  1. 用途不同:switch 语句用于根据不同的条件执行不同的代码块,而 select 语句用于在多个通信操作中选择一个可执行的操作。

  2. 表达式不同:switch 语句的条件表达式可以是任意类型的,而 select 语句的条件表达式只能是通信操作。

  3. 执行方式不同:switch 语句会按顺序执行每个条件分支,直到找到匹配的分支并执行其中的代码块,而 select 语句会从多个通信操作中选择一个可执行的操作并执行,如果有多个操作可执行,则随机选择一个执行。

  4. 阻塞行为不同:switch 语句不会阻塞,它会立即执行匹配的分支,而 select 语句会在所有操作都阻塞时才会阻塞,直到有一个操作可执行为止。

下面是一个示例,演示了 switch 语句和 select 语句的不同之处:

func main() {num := 2switch num {case 1:fmt.Println("num 是 1")case 2:fmt.Println("num 是 2")default:fmt.Println("num 是其他值")}ch1 := make(chan int)ch2 := make(chan int)select {case <-ch1:fmt.Println("从 ch1 读取到数据")case <-ch2:fmt.Println("从 ch2 读取到数据")default:fmt.Println("没有可执行的操作")}
}

输出结果为:

num 是 2
没有可执行的操作

这段代码创建了两个整型通道 ch1ch2。通道是用于在 Go 语言中进行协程间通信的一种机制。

在这段代码中,make(chan int) 创建了一个无缓冲的整型通道。无缓冲的通道意味着通道的发送和接收操作是同步的,即发送操作会阻塞直到有接收者准备好接收数据,接收操作会阻塞直到有发送者准备好发送数据。

你可以使用这两个通道来进行协程间的数据传递,例如:

func main() {ch1 := make(chan int)ch2 := make(chan int)go func() {ch1 <- 10 // 向 ch1 发送数据}()go func() {data := <-ch1 // 从 ch1 接收数据ch2 <- data  // 向 ch2 发送数据}()result := <-ch2 // 从 ch2 接收数据fmt.Println(result) // 输出结果为 10
}

在这个示例中,我们创建了两个协程,第一个协程向 ch1 发送数据,第二个协程从 ch1 接收数据并将其发送到 ch2,最后我们从 ch2 接收数据并打印出来。

通过通道的发送和接收操作,我们可以实现协程之间的同步和数据共享,从而实现并发编程。

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

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

相关文章

C# wpf 嵌入hwnd窗口

WPF Hwnd窗口互操作系列 第一章 嵌入Hwnd窗口&#xff08;本章&#xff09; 第二章 嵌入WinForm控件 第三章 嵌入WPF控件 文章目录 WPF Hwnd窗口互操作系列前言一、如何实现1、继承HwndHost2、实现抽象方法3、xaml中使用HwndHost控件 二、具体实现1、Win32窗口2、HwndSource窗…

思腾合力出席文化和旅游虚拟现实应用推广交流活动并作主题演讲

3月21日&#xff0c;由文化和旅游部产业发展司主办&#xff0c;中国信息通信研究院、北京市石景山区文化和旅游局、中国动漫集团有限公司承办的“数字赋能文旅场景建设行动——文化和旅游虚拟现实应用推广交流活动”在北京首钢一高炉SoReal科幻乐园成功举办。 思腾合力CMO徐莉受…

【第028篇】用IDEA打开并运行Eclipse创建的项目

下图我使用的是2021版本的idea 一、 导入 首先&#xff0c;点击左上方【File】-【New】-【Project from Existing Sources】 在目录中选择自己要导入的eclipse动态项目&#xff1b; 3、这里选择【import project from external model】&#xff0c;再选择【eclipse】&#…

【jenkins+cmake+svn管理c++项目】Windows环境安装以及工具配置

一、目标和环境 目标&#xff1a;搭建一个jenkins环境&#xff0c;实现jenkins调用cmake和svn和VS编译c项目&#xff0c;并将生成的库上传svn。 环境&#xff1a;win10虚拟机&#xff08;练习流程用&#xff0c;正式用的话还是放到服务器&#xff09;&#xff0c;VS2017. 二、…

Flask python :logging日志功能使用

logging日志的使用 一、了解flask日志1.1、Loggers记录器1.2、Handlers 处理器1.3、Formatters 格式化器 二、使用日志2.1、官网上的一个简单的示例2.2、基本配置2.3、具体使用示例2.4、运行 三、写在最后 一、了解flask日志 日志是一种非常重要的工具&#xff0c;可以帮助开发…

pandas 函数

pandas是基于numpy数组构建的&#xff0c;但二者最大的不同是pandas是专门为处理表格和混杂数据设计的&#xff0c;比较契合统计分析中的表结构&#xff0c;而numpy更适合处理统一的数值数组数据。pandas数组结构有一维Series和二维DataFrame。 Series的字符串表现形式为&#…

java Web线上网游商品交易平台用eclipse定制开发mysql数据库BS模式java编程jdbc

一、源码特点 jsp线上网游商品交易平台是一套完善的web设计系统&#xff0c;对理解JSP java SERLVET mvc编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,eclipse开发&#xff0c;数据库为Mysql5.0…

Spark SizeTrackingAppendOnlyMap 相关源代码分析

SizeTrackingAppendOnlyMap 在 ExternalAppendOnlyMap 中使用&#xff0c;当 map 中对象占用的内存大小超过一定阈值时&#xff0c;把 数据 spill 到磁盘。所以 SizeTrackingAppendOnlyMap extends AppendOnlyMap[K, V] with SizeTracker。 AppendOnlyMap AppendOnlyMap 是只…

ssh免密登陆实现

1. 本地客户端生成公钥和私钥 使用以下命令&#xff0c;然后一路按回车键使用默认值即可。 ssh-keygen -t rsa -C "My-SSH"// -t 表示ssh的密钥类型&#xff0c;常用的有&#xff1a;rsa、ed25519、dss。 // -C 名称标识&#xff0c;此值随意。 会在用户根目录下的…

基于springboot的交通管理在线服务系统的开发

传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装交通管理在线服务系统软件来发挥其高效地信息处理的作用&#xff0…

【LAMMPS学习】四、运行 LAMMPS(4) Windows 运行 LAMMPS

4. 运行 LAMMPS 本部分解释了在安装可执行文件或下载源代码并构建可执行文件后如何运行 LAMMPS。命令文档页面描述了输入脚本的结构以及它们可以包含的命令。 4.1.运行 LAMMPS 的基础知识 4.2.命令行选项 4.3.屏幕和日志文件输出 4.4.在 Windows 上运行 LAMMPS 串行&am…

【数据结构】常见线性结构

1.线性表 线性表 &#xff08; linear list &#xff09; 是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构&#xff0c;也就说是连续的一…

结构体-C语言

目录 前言 一、定义结构 结构体变量的创建和初始化 二、结构的特殊声明 特别注意&#xff1a; 结构的⾃引⽤ 三、结构体内存对⻬ 对⻬规则 优化结构体 #pragma 结构体传参 四、结构体实现位段 位段的内存分配 位段的跨平台问题 前言 C 数组允许定义可存储相同类…

Fiddler抓包工具之fiddler的常用快捷键

一、常用三个快捷键 ctrlX :清空所有记录 CtrlF&#xff1a;查找 F12&#xff1a;启动或者停止抓包 使用 QuickExec Fiddler2 成了网页调试必备的工具&#xff0c;抓包看数据。Fiddler2自带命令行控制。 fiddler 命令行快捷键&#xff1a;ctrl q &#xff0c;然后 输入 help…

题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

题目&#xff1a;有1、2、3、4个数字&#xff0c;能组成多少个互不相同且无重复数字的三位数&#xff1f;都是多少&#xff1f; There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence. The blog con…

约瑟夫环问题(队列,链表实现)- c++

1.关于约瑟夫问题 约瑟夫斯领导犹太人反抗罗马帝国的统治&#xff0c;在与罗马军队的激烈战斗中&#xff0c;与士兵们一同被困在一个山洞里。总共有41人&#xff0c;约瑟夫斯希望向罗马军队投降&#xff0c;但他的士兵们却坚决拒绝&#xff0c;宁愿死也不愿被敌人俘虏。面对这…

如何理解React的state、props、super()和super(props)

state 一个组件需要显示什么&#xff0c;怎么显示内容&#xff0c;都是由数据状态和外部参数决定的。 state就是这个数据状态。 当需要修改状态值的时候&#xff0c;通过调用setState&#xff0c;实现更新组件内部数据的问题。 setState的第一个参数有两种形式&#xff1a;…

电路常识:干接点、湿接点

1、干接点、湿接点的区别&#xff1a; 干接点和湿接点&#xff1a;是对开关量说的&#xff0c;即&#xff1a;通断。 干接点是一种无源开关&#xff0c;具有闭、合&#xff08;导通、断开&#xff09;两种状态&#xff0c;两个接触点之间没有极性可以互换。 常见的干接点&am…

数据分析---SQL基础

目录 什么是关系型数据库其他种类的数据库关系型数据库的基本操作数据库设计ER模型什么是关系型数据库 SQL(Structured Query Language)是用于管理关系型数据库的标准化查询语言。关系型数据库是一种基于关系模型(即表格)的数据库,它使用结构化查询语言(SQL)来管理和操作…

国家中英文名称、国家代码(地区代码)、国家域名、经纬度

因为要做世界地图对世界国家的标点&#xff0c;搜索使用到了世界各个国家的地理位置信息&#xff0c;此处做备份与学习。资源地址&#xff08;免费&#xff09; export default {"阿尔巴尼亚": {"m_longitude": "19.809","m_latitude&quo…