【发布时间】:2014-05-01 08:41:53
【问题描述】:
我天真地写了一段代码来改变 time.Ticker 的间隔,并且在审查它时我很生气:
package main
import (
"fmt"
"time"
)
func main() {
ticker := time.NewTicker(5 * time.Second)
switcher := time.NewTimer(16 * time.Second)
for {
select {
case <-ticker.C:
fmt.Println("ticker " + time.Now().Format("15:04:05"))
case <-switcher.C:
fmt.Println("switching")
ticker = time.NewTicker(1 * time.Second)
}
}
}
$ 运行 main.go
股票代码 02:19:03
股票代码 02:19:08
股票代码 02:19:13
切换
股票代码 02:19:15
股票代码 02:19:16
股票代码 02:19:17
它做我想做的事,即将ticker Ticker 的频率在 16 秒后切换到 1 秒。但是,再次阅读它,我希望在 16 秒后创建一个新的 Ticker 对象,而 select 语句包含对旧通道的引用,防止它进行垃圾收集并继续每五秒计时一次。
那么为什么这段代码会改变代码的频率呢?
【问题讨论】:
标签: go