Go語言中定時任務(wù)庫Cron使用方法介紹
快速入門
安裝cron,注意這里安裝的是v3版本。新版本和舊版時間使用有所區(qū)別
go get github.com/robfig/cron/v3@v3.0.0
在項目中導(dǎo)入
import "github.com/robfig/cron/v3"
v3版本的github.com/robfig/cron/v3默認(rèn)解析器符合Cron 維基百科頁面所描述的標(biāo)準(zhǔn)
用法大致如下
package main
import (
"fmt"
"github.com/robfig/cron/v3"
)
func main() {
c := cron.New()
c.AddFunc("30 * * * *", func() { fmt.Println("Every hour on the half hour") })
c.AddFunc("30 3-6,20-23 * * *", func() { fmt.Println(".. in the range 3-6am, 8-11pm") })
c.AddFunc("CRON_TZ=Asia/Tokyo 30 04 * * *", func() { fmt.Println("Runs at 04:30 Tokyo time every day") })
c.AddFunc("@hourly", func() { fmt.Println("Every hour, starting an hour from now") })
c.AddFunc("@every 1h30m", func() { fmt.Println("Every hour thirty, starting an hour thirty from now") })
c.Start()
select {}
}Cron表達(dá)式格式
一個 cron 表達(dá)式表示一組時間,使用 5 個空格分隔的字段。這是v3版本默認(rèn)支持的格式。
Field name | Mandatory? | Allowed values | Allowed special characters ---------- | ---------- | -------------- | -------------------------- Minutes | Yes | 0-59 | * / , - Hours | Yes | 0-23 | * / , - Day of month | Yes | 1-31 | * / , - ? Month | Yes | 1-12 or JAN-DEC | * / , - Day of week | Yes | 0-6 or SUN-SAT | * / , - ?
如果要想在v3版本中也支持秒級別的解析,需要自定義解析器。代碼如下
Field name | Mandatory? | Allowed values | Allowed special characters ---------- | ---------- | -------------- | -------------------------- Seconds | Yes | 0-59 | * / , - Minutes | Yes | 0-59 | * / , - Hours | Yes | 0-23 | * / , - Day of month | Yes | 1-31 | * / , - ? Month | Yes | 1-12 or JAN-DEC | * / , - Day of week | Yes | 0-6 or SUN-SAT | * / , - ?
func main() {
// Seconds field, required
cron.New(cron.WithSeconds())
// Seconds field, optional
cron.New(cron.WithParser(cron.NewParser(
cron.SecondOptional | cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow | cron.Descriptor,
)))
}預(yù)定義時間表
可以用@yearly、@monthly、@weekly、@weekly、@daily、@hourly來替代cron表達(dá)式。分別表示每年,每月、每星期、每天、每小時。
還可以用@every <duartion>來表示間隔時間,即間隔<duration>執(zhí)行一次任務(wù)。<duration>只要可以被time.ParseDuration()解析即可
設(shè)置時區(qū)
func main() {
cron.New(
cron.WithLocation(time.UTC))
}常用的方法介紹
New()
package main
import (
"fmt"
"github.com/robfig/cron/v3"
)
func main() {
// 創(chuàng)建一個默認(rèn)的cron對象
c := cron.New()
// 自定義解析器
cron.New(cron.WithSeconds())
// Seconds field, optional
cron.New(cron.WithParser(cron.NewParser(
cron.SecondOptional | cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow | cron.Descriptor,
)))
select {}
}AddJob()
// 有兩個參數(shù),第一個參數(shù)可以是cron表達(dá)式或者預(yù)定義時間表,第二個Job
func (c *Cron) AddJob(spec string, cmd Job) (EntryID, error)
// Job是一個接口,有一個Run方法
type Job interface {
Run()
}自定義個一個func類型,實現(xiàn)Run方法。不過一般可以直接用下面講的AddFunc方法即可
package main
import (
"fmt"
"github.com/robfig/cron/v3"
)
type MyJob func()
func (f MyJob) Run() {
fmt.Println("myJob")
}
func main() {
c := cron.New()
c.AddJob("@every 1s", MyJob(func() {
fmt.Println("myjob")
}))
c.Start()
select {}AddFunc()
// 有兩個參數(shù),第一個參數(shù)可以是cron表達(dá)式或者預(yù)定義時間表,第二個傳入一個函數(shù),就是要執(zhí)行的任務(wù)
// 會返回一個Id和error
// 會把傳入的cmd func轉(zhuǎn)成FuncJob。FuncJob實現(xiàn)了Job接口
func (c *Cron) AddFunc(spec string, cmd func()) (EntryID, error) {
return c.AddJob(spec, FuncJob(cmd))
}package main
import (
"fmt"
"github.com/robfig/cron/v3"
)
func main() {
c := cron.New()
Id, err := c.AddFunc("30 * * * *", func() { fmt.Println("Every hour on the half hour") })
// Id可以用做取消任務(wù)
c.Remove(Id)
select {}
}Start()
調(diào)用start方法開始執(zhí)行任務(wù)
func main() {
c := cron.New()
c.AddJob("@every 1s", MyJob(func() {
fmt.Println("myjob")
}))
c.AddFunc()
c.Start()
select {}
}到此這篇關(guān)于Go語言中定時任務(wù)庫Cron使用詳解的文章就介紹到這了,更多相關(guān)Go定時任務(wù)庫Cron內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Go中如何進(jìn)行進(jìn)行內(nèi)存優(yōu)化和垃圾收集器管理
這篇文章主要為大家詳細(xì)介紹了Go中如何進(jìn)行進(jìn)行內(nèi)存優(yōu)化和垃圾收集器管理,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以了解下2023-11-11
Golang 字符串與字節(jié)數(shù)組互轉(zhuǎn)的實現(xiàn)
在Go語言中,我們經(jīng)常在字符串和切片之間進(jìn)行轉(zhuǎn)換,本文就詳細(xì)的介紹一下Golang 字符串與字節(jié)數(shù)組互轉(zhuǎn)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02

