go語言定時(shí)器Timer及Ticker的功能使用示例詳解
定時(shí)器1-"*/5 * * * * *"
package main
import (
"fmt"
"github.com/robfig/cron"
)
//主函數(shù)
func main() {
cron2 := cron.New() //創(chuàng)建一個(gè)cron實(shí)例
//執(zhí)行定時(shí)任務(wù)(每5秒執(zhí)行一次)
err:= cron2.AddFunc("*/5 * * * * *", print5)
if err!=nil{
fmt.Println(err)
}
//啟動(dòng)/關(guān)閉
cron2.Start()
defer cron2.Stop()
select {
//查詢語句,保持程序運(yùn)行,在這里等同于for{}
}
}
//執(zhí)行函數(shù)
func print5() {
fmt.Println("每5s執(zhí)行一次cron")
}
設(shè)置說明
┌─────────────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) │ │ │ │ │ │ │ │ │ │ │ │ * * * * * *
星號(hào)(*) :表示 cron 表達(dá)式能匹配該字段的所有值。如在第5個(gè)字段使用星號(hào)(month),表示每個(gè)月
斜線(/):表示增長(zhǎng)間隔,如第2個(gè)字段(minutes) 值是 3-59/15,表示每小時(shí)的第3分鐘開始執(zhí)行一次,之后 每隔 15 分鐘執(zhí)行一次(即 3(3+0*15)、18(3+1*15)、33(3+2*15)、48(3+3*15) 這些時(shí)間點(diǎn)執(zhí)行),這里也可以表示為:3/15
逗號(hào)(,):用于枚舉值,如第6個(gè)字段值是 MON,WED,FRI,表示 星期一、三、五 執(zhí)行
連字號(hào)(-):表示一個(gè)范圍,如第3個(gè)字段的值為 9-17 表示 9am 到 5pm 直接每個(gè)小時(shí)(包括9和17)
問號(hào)(?):只用于 日(Day of month) 和 星期(Day of week),表示不指定值,可以用于代替 *
定時(shí)器2-Timer-Ticker
Timer //時(shí)間到了產(chǎn)生一次事件 Ticker //時(shí)間到了循環(huán)產(chǎn)生事件
Timer-只執(zhí)行一次
package main
import (
"fmt"
"time"
)
func main() {
//創(chuàng)建一個(gè)定時(shí)器,設(shè)置時(shí)間為2s,2s后,往time通道寫內(nèi)容(當(dāng)前時(shí)間)
timer := time.NewTimer(2 * time.Second)
fmt.Println("當(dāng)前時(shí)間:", time.Now())
//2s后,往timer.C寫數(shù)據(jù),有數(shù)據(jù)后,就可以讀取
t := <-timer.C //channel沒有數(shù)據(jù)前后阻塞
fmt.Println("t = ", t)
}
Ticker-循環(huán)執(zhí)行
package main
import (
"fmt"
"time"
)
//驗(yàn)證time.NewTimer(),時(shí)間到了,只會(huì)響應(yīng)一次
func main() {
timer := time.NewTicker(1 * time.Second)
for {
<-timer.C
fmt.Println("時(shí)間到")
}
}
結(jié)果:
時(shí)間到
時(shí)間到
時(shí)間到
時(shí)間到
Timer延時(shí)功能
time.NewTimer(2 * time.Second) //相當(dāng)于time.Sleep(2 * time.Second)
func main() {
//延時(shí)2s后打印一句話
timer := time.NewTimer(2 * time.Second)
<-timer.C
fmt.Println("時(shí)間到")
}
func main() {
<-time.After(2 * time.Second) //定時(shí)2s,阻塞2s, 2s后產(chǎn)生一個(gè)事件,往channel寫內(nèi)容
fmt.Println("時(shí)間到")
}
停止和重置定時(shí)器
ok := timer.Reset(1 * time.Second) //重新設(shè)置為1s timer.Stop() //停止定時(shí)器
停止:
func main() {
timer := time.NewTimer(3 * time.Second)
go func() {
<-timer.C
fmt.Println("子協(xié)程可以打印了,因?yàn)槎〞r(shí)器的時(shí)間到")
}()
timer.Stop() //停止定時(shí)器
for {
}
}
重置:
func main() {
timer := time.NewTimer(3 * time.Second)
ok := timer.Reset(1 * time.Second) //重新設(shè)置為1s
fmt.Println("ok = ", ok)
<-timer.C
fmt.Println("時(shí)間到")
}
定時(shí)器Ticker使用
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語言定時(shí)器的功能使用示例詳解的詳細(xì)內(nèi)容,更多關(guān)于go語言定時(shí)器的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Go語言中函數(shù)可變參數(shù)(Variadic Parameter)詳解
在Python中,在函數(shù)參數(shù)不確定數(shù)量的情況下,可以動(dòng)態(tài)在函數(shù)內(nèi)獲取參數(shù)。在Go語言中,也有類似的實(shí)現(xiàn)方式,本文就來為大家詳細(xì)講解一下2022-07-07
Go項(xiàng)目與Docker結(jié)合實(shí)現(xiàn)高效部署深入探究
在現(xiàn)代軟件開發(fā)中,使用Docker部署應(yīng)用程序已經(jīng)成為一種標(biāo)準(zhǔn)實(shí)踐,本文將深入探討如何將Go項(xiàng)目與Docker結(jié)合,實(shí)現(xiàn)高效、可靠的部署過程,通過詳細(xì)的步驟和豐富的示例,你將能夠迅速掌握這一流程2023-12-12
Golang內(nèi)存泄漏場(chǎng)景以及解決方案詳析
golang中內(nèi)存泄露的發(fā)現(xiàn)與排查一直是來是go開發(fā)者頭疼的一件事,下面這篇文章主要給大家介紹了關(guān)于Golang內(nèi)存泄漏場(chǎng)景以及解決的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01
一文詳細(xì)談?wù)凣oLang的panic和error
說是初識(shí),并不是說第一次使用error和panic包,而是第一次特地去了解golang中的這兩個(gè)機(jī)制,下面這篇文章主要給大家介紹了關(guān)于如何通過一文詳細(xì)談?wù)凣oLang中panic和error的相關(guān)資料,需要的朋友可以參考下2022-12-12

