在线文档  >   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 触发, 但是第二个定时器还未触发就停止了