博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
golang如何读取通道channel上的消息而不被阻塞
阅读量:3986 次
发布时间:2019-05-24

本文共 471 字,大约阅读时间需要 1 分钟。

有时候由这样的需求,要读取一个channel上的消息,查看在此刻通道上是否有消息,如果没有也不用阻塞,程序继续向下执行。

常规的读取方式肯定会导致阻塞,因为不一定有程序正在写通道;

我们可以借助 select 的方式来满足这个需求。

ch1 := make(chan int)go func(){
time.Sleep(3*time.Second) ch1<-1}()select {
default: fmt.Println("no")case <-ch1: fmt.Println("yes")}

代码执行结果为 no,可见并没有阻塞住。

如果向等待一会,可以将 default 换成超时

ch1 := make(chan int)go func(){
time.Sleep(3*time.Second) ch1<-1}()select {
case <-time.After(1 * time.Second): fmt.Println("no")case <-ch1: fmt.Println("yes")}

转载地址:http://ynaui.baihongyu.com/

你可能感兴趣的文章
i.mx53 uboot
查看>>
linux 驱动开发 头文件
查看>>
嵌入式linux 开发板 dhcp ip
查看>>
/etc/resolv.conf
查看>>
/etc/hosts
查看>>
container_of()传入结构体中的成员,返回该结构体的首地址
查看>>
linux sfdisk partition
查看>>
ipconfig,ifconfig,iwconfig
查看>>
opensuse12.2 PL2303 minicom
查看>>
电平触发方式和边沿触发的区别
查看>>
中断函数中不能调用ioremap()!!!!!!!
查看>>
网络视频服务器移植
查看>>
Encoding Schemes
查看>>
EFM32TG222F32连接JLink V8问题
查看>>
Keil问题
查看>>
移植QT
查看>>
交叉编译qt-everywhere-4.8.4
查看>>
tslib qt4 segmentation fault
查看>>
QT隐藏mouse
查看>>
求最短路径
查看>>