前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Go程序例子(38):定时器

Go程序例子(38):定时器

原创
作者头像
用户11078756
发布2024-12-18 09:45:40
发布2024-12-18 09:45:40
7400
代码可运行
举报
文章被收录于专栏:go程序例子go程序例子
运行总次数:0
代码可运行

我们经常希望在未来的某个时间点执行 Go 代码,或者在某个时间间隔内重复执行。Go 内置的 timer 和 ticker 功能使这两项任务变得简单。我们将首先了解 timers,然后再了解 tickers。

代码语言:go
复制
package main

import (
    "fmt"
    "time"
)

func main() {
	// Timers 代表未来的单个事件。你告诉定时器你希望等待多久,它会提供一个通道,在指定时间通知你。这个定时器将等待 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 秒触发,但第二个定时器应该在它有机会触发之前就被停止。

代码语言:javascript
代码运行次数:0
复制
$ go run timers.go
Timer 1 fired
Timer 2 stopped

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档