【发布时间】:2016-09-23 17:18:25
【问题描述】:
假设我们有多个通知源(通道),并且我们希望对其中一些通知事件执行一些类似的任务。例如,考虑我们每 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()
}
}
还有什么其他的、或许更好的方法可以实现类似的功能?
【问题讨论】:
-
go fmt是你最好的朋友,请使用它。