go 定时器
package main import ( "fmt" "time" ) func main() { t := time.NewTicker(time.Second) for v := range t.C { fmt.Println("hello, ", v) } }
- 一次定时器(官方不建议使用time.After,推荐time.NewTimer)
package main import ( "fmt" "time" ) func main() { select { case <- time.After(time.Second): fmt.Println("after") } }
上面代码一秒后执行
- 超时控制
package main import ( "fmt" "runtime" "time" ) func main() { num := runtime.NumCPU() runtime.GOMAXPROCS(num - 1) for i := 0; i < 16; i++ { go func() { for { t := time.NewTicker(time.Second) select { case <-t.C: fmt.Println("timeout") } t.Stop() } }() } time.Sleep(time.Second * 100) }
备注:使用定时器后,需要关闭,不关闭存在内存泄漏风险。