cfanbo / cfanbo.github.io

1 stars 0 forks source link

Golang中的两个定时器 ticker 和 timer | 学习笔记 #244

Open cfanbo opened 8 months ago

cfanbo commented 8 months ago

https://blog.haohtml.com//archives/19859

Golang中time包有两个定时器,分别为 ticker 和 timer。两者都可以实现定时功能,但各自都有自己的使用场景。 Ticker定时器 package main import ( "fmt" "time" ) func main() { // Ticker 包含一个通道字段C,每隔时间段 d 就向该通道发送当时系统时间。 // 它会调整时间间隔或者丢弃 tick 信息以适应反应慢的接收者。 // 如果d <= 0会触发panic。关闭该 Ticker 可以释放相关资源。 ticker1 := time.NewTicker(5 time.Second) // 一定要调用Stop(),回收资源 defer ticker1.Stop() go func(t time.Ticker) { for { // 每5秒中从chan t.C 中读取一次 <-t.C fmt.Println("Ticker:", time.Now().Format("2006-01-02 15:04:05")) } }(ticker1) time.Sleep(30 * time.Second) fmt.Println("ok") } 执行结果 开始时间: 2020-03-19 17:49:41 Ticker: 2020-03-19 17:49:46 Ticker: 2020-03-19 17:49:51 Ticker: 2020-03-19 17:49:56 Ticker: 2020-03-19 17:50:01 Ticker: 2020-03-19 17:50:06 结束时间: 2020-03-19 17:50:11 ok 可以看到每次执行的时间间隔都是一样的。