go cron定時任務(wù)的基本使用講解
1. 基本使用
引用包: "github.com/robfig/cron/v3"
1.1 初始化實例 new()
- 語法
func New(opts ...Option) *Cron
- 語法示例
c := cron.New()
1.2 添加定時任務(wù) AddFunc()
- 語法
func (c *Cron) AddFunc(spec string, cmd func()) (EntryID, error)
- 語法示例
c.AddFunc("* * * * *", func() { fmt.Println("====== 招募完成: 士兵 +1 =======") })
1.3 開始定時任務(wù) Start()
- 語法
func (c *Cron) Start()
- 語法示例
c.Start()
1.4 完整示例
- 代碼
package main import ( "fmt" "github.com/robfig/cron/v3" "time" ) func main() { //c := cron.New(cron.WithSeconds()) c := cron.New() c.Start() fmt.Println(time.Now()) c.AddFunc("* * * * *", func() { fmt.Println(time.Now(),"====== 招募完成: 士兵 +1 =======") }) c.AddFunc("*/5 * * * *", func() { fmt.Println(time.Now(),"====== 招募完成: 伍長 +1 =======") }) select {} }
- 結(jié)果
2022-12-16 16:40:32.155401624 +0800 CST m=+0.000051359
2022-12-16 16:41:00.012072936 +0800 CST m=+27.856722654 ====== 招募完成: 士兵 +1 =======
2022-12-16 16:42:00.061328164 +0800 CST m=+87.905977883 ====== 招募完成: 士兵 +1 =======
2022-12-16 16:43:00.003474685 +0800 CST m=+147.848124410 ====== 招募完成: 士兵 +1 =======
2022-12-16 16:44:00.059798048 +0800 CST m=+207.904447766 ====== 招募完成: 士兵 +1 =======
2022-12-16 16:45:00.06000457 +0800 CST m=+267.904654288 ====== 招募完成: 伍長 +1 =======
2022-12-16 16:45:00.060084718 +0800 CST m=+267.904734436 ====== 招募完成: 士兵 +1 =======
2022-12-16 16:46:00.042836167 +0800 CST m=+327.887485885 ====== 招募完成: 士兵 +1 =======
2022-12-16 16:47:00.000225283 +0800 CST m=+387.844875007 ====== 招募完成: 士兵 +1 =======
2022-12-16 16:48:00.000241943 +0800 CST m=+447.844891661 ====== 招募完成: 士兵 +1 =======
2022-12-16 16:49:00.040677982 +0800 CST m=+507.885327700 ====== 招募完成: 士兵 +1 =======
2022-12-16 16:50:00.00034055 +0800 CST m=+567.844990268 ====== 招募完成: 伍長 +1 =======
1.5 第一次執(zhí)行定時任務(wù)的契機
如上可見,定時任務(wù)第一次執(zhí)行的時候是程序開始的第一個契機:
- 16:40:32 程序開始執(zhí)行。
- 16:41:00 是一個整分鐘,每分鐘招募士兵開始執(zhí)行。
- 16:45:00 是開始后,第一個整五分鐘,因此五分鐘執(zhí)行一次的招募伍長開始執(zhí)行。
1.6 spec 的設(shè)置
- 語法
五個值分別為:
分鐘 小時 日 月 星期
- 使用示例
* * * * * //每分鐘執(zhí)行 00 */3 * * * //每隔3小時執(zhí)行 10 03 * * * //每天凌晨3點10分(00:10)執(zhí)行 00 02 * * 7 //每周日凌晨2:00 執(zhí)行 00 02 14 2 7 //每年2月14日凌晨2:00 或 每周日凌晨2:00 執(zhí)行(最后一位0和7 都表示周日) 00 02 2,5,8 * * //每月2,5,8號的2:00 執(zhí)行 00 02 1-8 * * //每月1到8號的凌晨2:00 執(zhí)行
2. 粒度到秒
2.1 語法示例
- 初始化
c := cron.New(cron.WithSeconds())
- spec
最左一位是秒,其他和之前分鐘粒度相同。
2.2 完整示例
- 代碼
package main import ( "fmt" "github.com/robfig/cron/v3" "time" ) func main() { c := cron.New(cron.WithSeconds()) fmt.Println(time.Now()) c.AddFunc("*/7 * * * * *", func() { fmt.Println(time.Now(),"====== 建造完成: 投石車 +1 =======") }) c.AddFunc("*/3 * * * * *", func() { fmt.Println(time.Now(),"====== 招募完成: 士兵 +1 =======") }) c.Start() select {} }
- 結(jié)果
2022-12-16 17:29:26.672306792 +0800 CST m=+0.000036478
2022-12-16 17:29:27.001131052 +0800 CST m=+0.328860748 ====== 招募完成: 士兵 +1 =======
2022-12-16 17:29:28.000333997 +0800 CST m=+1.328063678 ====== 建造完成: 投石車 +1 =======
2022-12-16 17:29:30.000180946 +0800 CST m=+3.327910638 ====== 招募完成: 士兵 +1 =======
2022-12-16 17:29:33.002458758 +0800 CST m=+6.330188430 ====== 招募完成: 士兵 +1 =======
2022-12-16 17:29:35.000249936 +0800 CST m=+8.327979610 ====== 建造完成: 投石車 +1 =======
2022-12-16 17:29:36.000311745 +0800 CST m=+9.328041418 ====== 招募完成: 士兵 +1 =======
2022-12-16 17:29:39.002463183 +0800 CST m=+12.330192861 ====== 招募完成: 士兵 +1 =======
2022-12-16 17:29:42.000297949 +0800 CST m=+15.328027640 ====== 建造完成: 投石車 +1 =======
2022-12-16 17:29:42.000353037 +0800 CST m=+15.328082842 ====== 招募完成: 士兵 +1 =======
2022-12-16 17:29:45.00024908 +0800 CST m=+18.327978755 ====== 招募完成: 士兵 +1 =======
2022-12-16 17:29:48.002469543 +0800 CST m=+21.330199229 ====== 招募完成: 士兵 +1 =======
如上可見:
- 17:29:26 程序開始執(zhí)行
- 17:29:27 ,27秒是第一個3秒的整倍數(shù),每隔3秒 招募一個士兵的任務(wù)開始執(zhí)行
- 17:29:35,35秒是第一個7秒的整倍數(shù),每隔7秒 建造一個投石車的任務(wù)開始執(zhí)行。
3. 按時間間隔
3.1 語法
符號 | 說明 | 示例 |
---|---|---|
@yearly | 每年執(zhí)行 | |
@monthly | 每月執(zhí)行 | |
@weekly | 每周執(zhí)行 | |
@daily | 每天執(zhí)行 | |
@hourly | 每小時執(zhí)行 | |
@every | 指定間隔 | "@every 1h25m" |
3.2 完整示例(@every)
- 代碼
package main import ( "fmt" "github.com/robfig/cron/v3" "time" ) func main() { c := cron.New(cron.WithSeconds()) fmt.Println(time.Now()) c.AddFunc("@every 1m", func() { fmt.Println(time.Now(),"====== 建造完成: 投石車 +1 =======") }) c.Start() select {} }
結(jié)果
如下可見,和前文“基本使用”中示例的執(zhí)行契機不同。會在程序啟動后一分鐘執(zhí)行,而不是在下一個一分鐘的整倍數(shù)執(zhí)行。
- 程序在09:53:11啟動,在一分鐘之后(09:54:11)執(zhí)行第一次
- 如果是基本使用中的方法:程序在09:53:11啟動,會在09:54:00 執(zhí)行第一次
2022-12-21 09:53:11.620438535 +0800 CST m=+0.000041561
2022-12-21 09:54:11.008589266 +0800 CST m=+59.388192276 ====== 建造完成: 投石車 +1 =======
2022-12-21 09:55:11.052366134 +0800 CST m=+119.431969148 ====== 建造完成: 投石車 +1 =======
2022-12-21 09:56:11.008584381 +0800 CST m=+179.388187390 ====== 建造完成: 投石車 +1 =======
2022-12-21 09:57:11.018895862 +0800 CST m=+239.398498872 ====== 建造完成: 投石車 +1 =======
2022-12-21 09:58:11.018836287 +0800 CST m=+299.398439302 ====== 建造完成: 投石車 +1 =======
2022-12-21 09:59:11.008604569 +0800 CST m=+359.388207580 ====== 建造完成: 投石車 +1 =======
2022-12-21 10:00:11.006091578 +0800 CST m=+419.385694593 ====== 建造完成: 投石車 +1 =======
2022-12-21 10:01:11.010293781 +0800 CST m=+479.389896790 ====== 建造完成: 投石車 +1 =======
3.3 完整示例
- 代碼
package main import ( "fmt" "github.com/robfig/cron/v3" "time" ) func main() { c := cron.New(cron.WithSeconds()) fmt.Println(time.Now()) c.AddFunc("@weekly", func() { fmt.Println(time.Now(),"====== 建造完成: 投石車 +1 =======") }) c.Start() select {} }
- 結(jié)果
時間太長等不來了
以上就是gocron定時任務(wù)的基本使用講解的詳細內(nèi)容,更多關(guān)于gocron定時任務(wù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
golang結(jié)構(gòu)化日志log/slog包之slog.Record的用法簡介
這篇文章主要為大家詳細介紹了golang結(jié)構(gòu)化日志log/slog包中slog.Record結(jié)構(gòu)體的使用方法和需要注意的點,文中的示例代碼講解詳細,需要的可以學(xué)習(xí)一下2023-10-10golang調(diào)用shell命令(實時輸出,終止)
本文主要介紹了golang調(diào)用shell命令(實時輸出,終止),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02golang elasticsearch Client的使用詳解
這篇文章主要介紹了golang elasticsearch Client的使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-05-05Go+Kafka實現(xiàn)延遲消息的實現(xiàn)示例
本文主要介紹了Go+Kafka實現(xiàn)延遲消息的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07Go語言編程中判斷文件是否存在是創(chuàng)建目錄的方法
這篇文章主要介紹了Go語言編程中判斷文件是否存在是創(chuàng)建目錄的方法,示例都是使用os包下的函數(shù),需要的朋友可以參考下2015-10-10Go語言實現(xiàn)控制臺輸入&生成隨機數(shù)詳解
這篇文章主要介紹了Go語言如何實現(xiàn)控制臺輸入&生成隨機數(shù),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05