为了账号安全,请及时绑定邮箱和手机立即绑定

如何在不等待的情况下从通道获取值

如何在不等待的情况下从通道获取值

Go
Smart猫小萌 2021-06-18 22:05:58
在 Go 中,如果我尝试从通道接收,程序的执行将停止,直到通道中存在某个值。但是,我想做的是让程序继续执行,如果通道中有值,则对其进行操作。我想到的伪代码是这样的:mychan := make(chan int, 1)go someGoRoutine(mychan) // This might put some value in mychan at some pointfor {    if something in "mychan" {        // Remove the element from "mychan" and process it    } else {        // Other code    }}据我了解,我不能简单地使用,v <- mychan因为这会阻止程序执行,直到值可用。在 Go 中这样做的方法是什么?
查看完整描述

1 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

这就是选择的用途。例如:


for {

        select {

        case v := <-c1:

                // process v

        case v, ok := <-c2:

                // Second form, '!ok' -> c2 was closed

        default:

                // receiving was not done

        }

}


查看完整回答
反对 回复 2021-06-21
  • 1 回答
  • 0 关注
  • 174 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信