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)
}

第一个计时器将在我们启动程序后约 2 秒触发,但第二个计时器应该在它有机会触发之前停止。

$ go run timers.go
Timer 1 fired
Timer 2 stopped

下一个示例:滴答器