假设我们有多个通知源( 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/