select - Go语言——为多个select case运行相同的代码

标签 select go channel

假设我们有多个通知源( channel ),我们想对其中一些通知事件执行一些类似的任务。例如,考虑我们每 10 分钟调用一次 doSomething() 以及根据用户请求调用一次的情况。 Go 中的可能实现可能是这样的:

var ticker = time.NewTicker(10*time.Minute)
nowDoSomething := make(chan time.Time, 1)
for {
    select {
    case <-ticker.C:
        nowDoSomething<-time.Now()

    case <-userReq: // some channel activated occasionally 
        nowDoSomething<-time.Now()

    case <-nowDoSomething:
        doSomething()
    }
}

还有什么其他的(或许更好的)方法可以实现类似的功能?

最佳答案

也许您可以使用 reflect 包中的 Select 函数来做到这一点:

func Select(cases []SelectCase) (chosen int, recv Value, recvOK bool)

关于select - Go语言——为多个select case运行相同的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37448372/

相关文章:

php - MYSQL中如何连接所有三个表?

mySQL 从计算值返回不同的行

go - 我怎样才能制作一个可以自行删除的go程序?

子例程中的 Go Channel

c++ - 使用 V4L2 API 选择输入 channel

go - 如何使用 channel 对 golang 管道阶段中的项目进行批处理?

mysql - 如何使用 SQL 选择列中共享最大值的所有行

javascript - 如何将多选的值放入 echo 语句中?

go - 为什么使用多个以太网连接会降低 I/O 绑定(bind)任务的吞吐量

go - 如何使用 Ubuntu 更新 codeanywhere.com 上的 golang