1
我天真地写了一段代码来改变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
股票2时19分03秒
股票2点19分08秒
股票二点19分13秒
切换
股票2点十九分15秒
抽动KER二时十九分16秒
股票2时19分十七秒
据我想要做什么,即ticker
北京时间频率切换至一个第二个16秒后。但是,再次阅读我预计在16秒后,会创建一个新的Ticker对象,而select
语句保留对旧通道的引用,从而防止垃圾收集并保持每五秒钟滴答。
那么为什么这段代码改变了股票的频率?