上次写了一篇关于golang crontab的用爱疯,这次说下golang timer定时器的用法。 golang的time.NewTicker创建定时任务时,是阻塞同步的。如果不想因为同步阻塞了main线程,可以给每个定时函数分配一个goroutine协程。
该文章写的有些乱,欢迎来喷 ! 另外文章后续不断更新中,请到原文地址查看更新。
golang的time模块提供了两个定时函数。 需要注意的是golang timer定时器是不能stop停止的,只能在逻辑上通过标示位来退出定时任务 。
1 2 3 4 5 6 7 8 9 10 11 12 |
// xiaorui.cc // 使用AfterFunc time.AfterFunc(5 * time.Minute, func() { fmt.Printf("expired") } // timer := time.NewTimer(5 * time.Minute) <-timer.C fmt.Printf("expired") |
时间格式:
1 2 3 4 5 6 |
秒: time.Second 分钟: time.Minute |
下面是go timer的具体使用实例。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
package main // xiaorui.cc import ( "fmt" "time" ) func testTimer1() { go func() { fmt.Println("test timer1") }() } func testTimer2() { go func() { fmt.Println("test timer2") }() } func timer1() { timer1 := time.NewTicker(2 * time.Second) select { case <-timer1.C: testTimer1() } } func timer2() { timer2 := time.NewTicker(3 * time.Second) select { case <-timer2.C: testTimer2() } } func main() { go timer1() go timer2() fmt.Println("will end") time.Sleep(5 * time.Second) } |
有疑问加站长微信联系(非本文作者)