您好,登录后才能下订单哦!
本文小编为大家详细介绍“go语言定时器Timer及Ticker怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“go语言定时器Timer及Ticker怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
package main import ( "fmt" "github.com/robfig/cron" ) //主函数 func main() { cron2 := cron.New() //创建一个cron实例 //执行定时任务(每5秒执行一次) err:= cron2.AddFunc("*/5 * * * * *", print5) if err!=nil{ fmt.Println(err) } //启动/关闭 cron2.Start() defer cron2.Stop() select { //查询语句,保持程序运行,在这里等同于for{} } } //执行函数 func print5() { fmt.Println("每5s执行一次cron") }
┌─────────────second 范围 (0 - 60) │ ┌───────────── min (0 - 59) │ │ ┌────────────── hour (0 - 23) │ │ │ ┌─────────────── day of month (1 - 31) │ │ │ │ ┌──────────────── month (1 - 12) │ │ │ │ │ ┌───────────────── day of week (0 - 6) (0 to 6 are Sunday to │ │ │ │ │ │ Saturday) │ │ │ │ │ │ │ │ │ │ │ │ * * * * * *
星号(*) :表示 cron 表达式能匹配该字段的所有值。如在第5个字段使用星号(month),表示每个月
斜线(/):表示增长间隔,如第2个字段(minutes) 值是 3-59/15,表示每小时的第3分钟开始执行一次,之后 每隔 15 分钟执行一次(即 3(3+0*15)、18(3+1*15)、33(3+2*15)、48(3+3*15) 这些时间点执行),这里也可以表示为:3/15
逗号(,):用于枚举值,如第6个字段值是 MON,WED,FRI,表示 星期一、三、五 执行
连字号(-):表示一个范围,如第3个字段的值为 9-17 表示 9am 到 5pm 直接每个小时(包括9和17)
问号(?):只用于 日(Day of month) 和 星期(Day of week),表示不指定值,可以用于代替 *
Timer //时间到了产生一次事件 Ticker //时间到了循环产生事件
package main import ( "fmt" "time" ) func main() { //创建一个定时器,设置时间为2s,2s后,往time通道写内容(当前时间) timer := time.NewTimer(2 * time.Second) fmt.Println("当前时间:", time.Now()) //2s后,往timer.C写数据,有数据后,就可以读取 t := <-timer.C //channel没有数据前后阻塞 fmt.Println("t = ", t) }
package main import ( "fmt" "time" ) //验证time.NewTimer(),时间到了,只会响应一次 func main() { timer := time.NewTicker(1 * time.Second) for { <-timer.C fmt.Println("时间到") } }
结果:
时间到
时间到
时间到
时间到
time.NewTimer(2 * time.Second) //相当于time.Sleep(2 * time.Second) func main() { //延时2s后打印一句话 timer := time.NewTimer(2 * time.Second) <-timer.C fmt.Println("时间到") } func main() { <-time.After(2 * time.Second) //定时2s,阻塞2s, 2s后产生一个事件,往channel写内容 fmt.Println("时间到") }
ok := timer.Reset(1 * time.Second) //重新设置为1s timer.Stop() //停止定时器
停止:
func main() { timer := time.NewTimer(3 * time.Second) go func() { <-timer.C fmt.Println("子协程可以打印了,因为定时器的时间到") }() timer.Stop() //停止定时器 for { } }
重置:
func main() { timer := time.NewTimer(3 * time.Second) ok := timer.Reset(1 * time.Second) //重新设置为1s fmt.Println("ok = ", ok) <-timer.C fmt.Println("时间到") }
package main import ( "fmt" "time" ) func main() { ticker := time.NewTicker(1 * time.Second) i := 0 for { <-ticker.C i++ fmt.Println("i = ", i) if i == 5 { ticker.Stop() break } } }
读到这里,这篇“go语言定时器Timer及Ticker怎么使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。