二、Golang定时器的停止
1、Timer
func Timer() {
duration := time.Second
timer := time.NewTimer(duration)
cnt := 0
for range timer.C {
fmt.Println(time.Now())
timer.Reset(duration)
cnt++
if cnt == 5 {
timer.Stop()
break
}
}
}
2、Tick
Tick实际上是对底层Ticker的封装,由于它直接返回的是<-chan Time类型,并没有像Timer或Ticker一样提供一个Stop函数来停止计时器,也由于chan是一个只有接收类型,因此也不能通过close直接关闭,因此这里是有可能产生内存泄漏现象
func Timer() {
duration := time.Second
cnt := 0
for next := range time.Tick(duration) {
fmt.Println(next)
cnt++
if cnt == 5 {
break
}
}
}
3、Ticker
func Timer() {
duration := time.Second
ticker := time.NewTicker(duration)
cnt := 0
for next := range ticker.C {
fmt.Println(next)
cnt++
if cnt == 5 {
ticker.Stop()
break
}
}
}