go语言使用chan的小技巧

news/2024/11/16 7:36:10/

技巧1:关闭某个chan时,所有读取该chan的协程都会收到通知

注意事项:是直接关闭chan就可以了,不需要向这个协程内压入数据,因为压入数据的话最终还得关闭chan

举例:如果协程A希望协程B在处理完某个事情后自己能收到通知,可以向协程B的函数参数中传入一个chan,然后协程A阻塞读取该chan。协程B在需要通知其的时候关闭chan即可,这样协程A就会返回。

常用于:某个协程内新建了一个子协程,但是希望子协程在某个时候,例如初始化完成时通知自己

代码实验:

1. 主协程创建一个子协程,在子协程的函数参数中传入一个无缓冲的chan

2. 主协程阻塞读取这个chan

3. 子协程在2秒后关闭这个chan,可以发现主协程从阻塞中返回

实验结果如下图(可以发现子协程一旦关闭chan,主协程立马就从阻塞中返回了)

完整代码

package main
import ("fmt""time"
)
func func1(c chan bool) {fmt.Println("func1 init start, time=", time.Now().UnixMilli())// 用sleep模拟初始化工作time.Sleep(time.Second)fmt.Println("func1 init end,   time=", time.Now().UnixMilli())close(c)time.Sleep(time.Second)fmt.Println("func1 end, 	  time=", time.Now().UnixMilli())
}func main() {fmt.Println("main start,       time=", time.Now().UnixMilli())c := make(chan bool, 1)go func1(c)// 开始阻塞等待<-cfmt.Println("main continue,    time=", time.Now().UnixMilli())time.Sleep(time.Second * 2)
}


http://www.ppmy.cn/news/1010180.html

相关文章

yolov8在rknn(rv1109/1126)模型转换、量化移植过程

续&#xff1a;rv1109/1126 rknn 模型量化过程_CodingInCV的博客-CSDN博客 Yolov8简介 yolov8是比较新的目标检测模型&#xff0c;根据论文和开源项目的报告&#xff0c;相对使用比较广泛的yolov5提升还比较明显。 yolov8与yolov5相比&#xff0c;结构上的主要区别是将C3结构…

谈谈网络安全

目录 1.概念 2.发展现状 3.主要问题 1.概念 网络安全是指保护计算机网络和其中的数据免受未经授权访问、损坏、窃取或破坏的过程和技术。网络安全涉及预防和检测潜在的威胁和漏洞&#xff0c;并采取措施保护网络的机密性、完整性和可用性。 网络安全的概念包括以下几个方面&am…

每日一题——两数之和

题目 给出一个整型数组 numbers 和一个目标值 target&#xff0c;请在数组中找出两个加起来等于目标值的数的下标&#xff0c;返回的下标按升序排列。 &#xff08;注&#xff1a;返回的数组下标从1开始算起&#xff0c;保证target一定可以由数组里面2个数字相加得到&#xff0…

C++路线(全网20篇高赞文章总结)

为节省时间&#xff0c;可直接跳转到 --> &#x1f33c;干货 目录 &#x1f33c;前言 &#x1f33c;来源 &#x1f416;现状 &#x1f33c;干货 入门阶段 入门项目 学习顺序 &#x1f409;大二打算 &#x1f33c;前言 来源的20篇博客&#xff0c;视频中&#x…

【C++】二叉搜索树的模拟实现

&#x1f307;个人主页&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;命运给你一个低的起点&#xff0c;是想看你精彩的翻盘&#xff0c;而不是让你自甘堕落&#xff0c;脚下的路虽然难走&#xff0c;但我还能走&#xff0c;比起向阳而生&#xff0c;我更想尝试逆风…

neo4j查询语言Cypher详解(二)--Pattern和类型

Patterns 图形模式匹配是Cypher的核心。它是一种用于通过应用声明性模式从图中导航、描述和提取数据的机制。在MATCH子句中&#xff0c;可以使用图模式定义要搜索的数据和要返回的数据。图模式匹配也可以在不使用MATCH子句的情况下在EXISTS、COUNT和COLLECT子查询中使用。 图…

Sencha Ext.NET Crack 快速应用程序的正确工具集

Sencha Ext.NET Crack 快速应用程序的正确工具集 Sencha Ext.NET是一个高级的ASP.NET核心组件框架&#xff0c;它包含了强大的跨浏览器Sencha Ext JS库。通过140多个预构建和专业测试的UI组件实现企业级性能和生产效率。Sencha Ext.NET使用尖端的Web技术创建功能强大的Web应用程…

[JavaScript游戏开发] Q版地图上让英雄、地图都动起来

系列文章目录 第一章 2D二维地图绘制、人物移动、障碍检测 第二章 跟随人物二维动态地图绘制、自动寻径、小地图显示(人物红点显示) 第三章 绘制冰宫宝藏地图、人物鼠标点击移动、障碍检测 第四章 绘制Q版地图、键盘上下左右地图场景切换 第五章 Q版地图上让英雄、地图都动起来…