我们经常希望在未来的某个时间点执行 Go 代码,或者在某个时间间隔内重复执行。Go 内置的 timer 和 ticker 功能使这两项任务变得简单。我们将首先了解 timers,然后再了解 tickers。
package main
import (
"fmt"
"time"
)
func main() {
// Timers 代表未来的单个事件。你告诉定时器你希望等待多久,它会提供一个通道,在指定时间通知你。这个定时器将等待 2 秒。
timer1 := time.NewTimer(2 * time.Second)
// <-timer1.C 会在定时器的通道 C 上阻塞,直到定时器触发并发送一个值,表示定时器已到期。
<-timer1.C
fmt.Println("Timer 1 fired")
// 如果你只是想等待,可以使用 time.Sleep。定时器之所以有用的一个原因是,你可以在定时器触发之前取消它。下面是一个相关的示例。
timer2 := time.NewTimer(time.Second)
go func() {
<-timer2.C
fmt.Println("Timer 2 fired")
}()
stop2 := timer2.Stop()
if stop2 {
fmt.Println("Timer 2 stopped")
}
// 给 timer2 足够的时间来触发(如果它真的会触发),以证明它实际上已经被停止。
time.Sleep(2 * time.Second)
}
第一个定时器将在我们启动程序后大约 2 秒触发,但第二个定时器应该在它有机会触发之前就被停止。
$ go run timers.go
Timer 1 fired
Timer 2 stopped
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。