在线文档 > Golang练习 > 计时器-Timer
在Go中,我们经常希望在未来的某个时间执行Go代码,或者以某个间隔重复执行。Go的内置计时器和定时器功能使这两个任务变得容易。我们将首先看计时器,然后看定时器 。
package main
import (
"fmt"
"time"
)
func main() {
//计时器表示未来的单个事件。
// 您告诉计时器要等多长时间,它会提供一个通道,在该通道上将在那个时间通知。
// 这个计时器将等待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)
}
运行结果如下:
$ go run timers.go
Timer 1 fired
Timer 2 stopped
第一个定时器将在程序开始后大约 2s 触发, 但是第二个定时器还未触发就停止了