网站首页 > 博客文章 正文
go chan 提供了一种新的共享内存方式, 使用通信来共享内存,而不是使用共享内存来通信(), 使用起来非常简单
c := make(chan int)
<- c
<- c 会阻塞到有数据有数据写入c时才会取消阻塞
那么如何非阻塞地从 chan 中读取数据? go 提供了 select, 可以实现非阻塞读取数据
select {
case <-c :
default:
}
?
当没有default 时, select 是阻塞的,添加default后,如果 c 里面没有数据, select 会立即结束.
如果想等待 <-c 一段时间(如1秒), 有数据写入或超时后再结束,可以使用time.After
?
select {
case <-c:
case <-time.After(time.Second):
}
time.After 会生成一个 <-chan Time, 如果 c 一直没有数据写入,select 会阻塞到 <-chan Time 超时后结束
猜你喜欢
- 2024-10-03 关于go语言中的协程相关知识点总结(三)
- 2024-10-03 详解MS SQL日常维护管理脚本--第二部分
- 2024-10-03 go语言goroutine调度原理以及channel详解
- 2024-10-03 SQL SERVER:索引概述及创建与使用(41)
- 2024-10-03 SQL Server 联接概述(sqlserver连接工具有哪些)
- 2024-10-03 从OOM的角度,带你了解虚拟内存机制
- 2024-10-03 golang开发:select多路选择(golang elseif)
- 2024-10-03 从0开始学Golang编程-基础语法(golang语言基础)
- 2024-10-03 数据库加锁原理举例说明(数据库加锁解锁)
- 2024-10-03 如何正确地使用Go Channel(如何正确地使用教材)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- messagesource (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)