欢迎访问宙启技术站
智能推送

golang中Ticker如何使用

发布时间:2023-05-18 02:45:37

在golang中,Ticker是一个定时触发的计时器,可以周期性地生成时间信号。它与time.NewTimer类似,不同之处在于,它可以按照设定的时间间隔多次触发。

如何使用Ticker?

ticker := time.NewTicker(time.Duration(interval) * time.Second)

这条语句将创建一个Ticker,其时间间隔为interval秒。为了停止Ticker,可以使用ticker.Stop()方法。

让我们看一个简单的例子。

func main() {

    ticker := time.NewTicker(1 * time.Second)

    quit := make(chan struct{})

    go func() {

        for {

            select {

            case <-ticker.C:

                fmt.Println("Ticker ticked!")

            case <-quit:

                ticker.Stop()

                return

            }

        }

    }()

    time.Sleep(5 * time.Second)

    quit <- struct{}{}

    fmt.Println("Ticker stopped.")

}

在此示例中,我们使用了select语句,它会在ticker.C信道上阻塞,等待定期发生的时间脉冲。同时,我们也提供了一个quit信道,用于在5秒后停止Ticker。这个例子中,Ticker每秒钟会发出一个时间脉冲信号,打印“Ticker ticked!",直到它被停止。然后会打印"Ticker stopped."。

Ticker和Timer的区别?

函数time.NewTimer设置的时间到达后,将向其C通道发送一个当前时间形式的值,而函数time.NewTicker则从 次Tick开始,持续间隔duration的时间段后,向C通道发送一个事件。

因此,在执行一些任务时,如果任务需要周期性执行,就应该使用Ticker;否则,如果只需要执行一次或需要对任务执行间隔进行计时,就应该使用Timer。

Ticker和Timer都是来源于tm包,其代码查看方式为:

type Ticker struct {

    C <-chan Time // 发送时间脉冲的信道。

    r runtimeTimer

    // contains filtered or unexported fields

}

type Timer struct {

    C <-chan Time // 发送时间的值的信道。

    r runtimeTimer

    // contains filtered or unexported fields

}

注意:time.NewTicker和time.NewTimer都会返回一个指针。因此,如果你需要保留对这些项的引用,请不要忘记作为指针调用它们。