time.NewTimer
和 time.NewTicker
都是 Go 语言标准库中的时间包提供的函数,但它们的用途和使用场景有所不同。
time.NewTimer
创建一个定时器,在指定的持续时间后,这个定时器会触发一个通道(channel)上的值可以被接收。这个通道是 Timer
类型的一个字段。你可以使用 <-t.C
来接收这个通道,并通过 t.Stop()
来停止计时器。
time.NewTicker
创建一个轮询器,它会按照指定的间隔时间周期性地触发一个通道上的值可以被接收。这个通道是 Ticker
类型的一个字段。你可以使用 <-t.C
来接收这个通道,并通过 t.Stop()
来停止轮询器,这会导致通道被关闭。
下面是使用 time.NewTimer
和 time.NewTicker
的示例代码:
package main
import (
"fmt"
"time"
)
func main() {
// 使用 time.NewTimer
timer := time.NewTimer(2 * time.Second)
go func() {
<-timer.C
fmt.Println("Timer expired")
}()
stop := timer.Stop() // 停止计时器
fmt.Println("Timer stopped:", stop)
// 使用 time.NewTicker
ticker := time.NewTicker(1 * time.Second)
go func() {
for t := range ticker.C {
fmt.Println("Tick at", t)
}
}()
// 停止轮询器,通道将被关闭
time.Sleep(5 * time.Second)
ticker.Stop()
fmt.Println("Ticker stopped")
}
在这个例子中,我们首先创建了一个定时器,然后立即停止它。接着,我们创建了一个轮询器,它会每秒触发一次,然后在5秒后停止它。