最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語言中定時任務(wù)庫Cron使用方法介紹

 更新時間:2022年03月30日 14:43:13   作者:jiangxiaoju  
cron的意思計劃任務(wù),說白了就是定時任務(wù)。我和系統(tǒng)約個時間,你在幾點(diǎn)幾分幾秒或者每隔幾分鐘跑一個任務(wù)(job),今天通過本文給大家介紹下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類型,實(shí)現(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實(shí)現(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常用技能日志log包創(chuàng)建使用示例

    Go常用技能日志log包創(chuàng)建使用示例

    這篇文章主要為大家介紹了Go常用技能日志log包創(chuàng)建使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 詳解Go中如何進(jìn)行進(jìn)行內(nèi)存優(yōu)化和垃圾收集器管理

    詳解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
  • Go語言讀取文件的方法小結(jié)

    Go語言讀取文件的方法小結(jié)

    寫程序時經(jīng)常需要從一個文件讀取數(shù)據(jù),然后輸出到另一個文件,這篇文章主要為大家詳細(xì)介紹了Go語言讀取文件的幾種方法,希望對大家有所幫助
    2024-01-01
  • 解決golang http.FileServer 遇到的坑

    解決golang http.FileServer 遇到的坑

    這篇文章主要介紹了解決golang http.FileServer 遇到的坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Golang 斷言與閉包使用解析

    Golang 斷言與閉包使用解析

    這篇文章主要介紹了Golang 斷言與閉包使用解析,Go中的斷言用于判斷變量的類型,更多相關(guān)內(nèi)容需要的朋友可以參考一下
    2022-07-07
  • 使用Go語言實(shí)現(xiàn)benchmark解析器

    使用Go語言實(shí)現(xiàn)benchmark解析器

    這篇文章主要為大家詳細(xì)介紹了如何使用Go語言實(shí)現(xiàn)benchmark解析器并實(shí)現(xiàn)及Web UI 數(shù)據(jù)可視化,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考一下
    2025-04-04
  • golang panic及處理機(jī)制

    golang panic及處理機(jī)制

    Go語言追求簡潔優(yōu)雅,所以,Go語言不支持傳統(tǒng)的 try…catch…finally 這種異常,因為Go語言的設(shè)計者們認(rèn)為,將異常與控制結(jié)構(gòu)混在一起會很容易使得代碼變得混亂,今天給大家介紹golang panic及處理機(jī)制,需要的朋友參考下吧
    2021-08-08
  • Go語言實(shí)現(xiàn)AOI區(qū)域視野管理流程詳解

    Go語言實(shí)現(xiàn)AOI區(qū)域視野管理流程詳解

    在游戲中,場景里存在大量的物體.如果我們把所有物體的變化都廣播給玩家.那客戶端很難承受這么大的壓力.因此我們肯定會做優(yōu)化.把不必要的信息過濾掉.如只關(guān)心玩家視野所看到的.減輕客戶端的壓力,給玩家更流暢的體驗
    2023-03-03
  • Go 語言中 20 個占位符的整理

    Go 語言中 20 個占位符的整理

    這篇文章主要介紹了Go 語言中 20 個占位符的整理,看完本篇文章講學(xué)會什么是占位符?哪些函數(shù)支持?如何使用占位符?不同的占位符的作用?配合占位符的幾個標(biāo)記符號用法?
    2021-10-10
  • Golang 字符串與字節(jié)數(shù)組互轉(zhuǎn)的實(shí)現(xiàn)

    Golang 字符串與字節(jié)數(shù)組互轉(zhuǎn)的實(shí)現(xiàn)

    在Go語言中,我們經(jīng)常在字符串和切片之間進(jìn)行轉(zhuǎn)換,本文就詳細(xì)的介紹一下Golang 字符串與字節(jié)數(shù)組互轉(zhuǎn)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02

最新評論

商都县| 哈密市| 永平县| 枣强县| 万山特区| 文水县| 沈丘县| 大方县| 宁都县| 镇坪县| 房山区| 阿巴嘎旗| 基隆市| 绩溪县| 陕西省| 桓仁| 阳泉市| 黑山县| 乳山市| 西吉县| 木里| 武威市| 呼图壁县| 双鸭山市| 波密县| 赫章县| 桐乡市| 商都县| 临泽县| 琼结县| 扶余县| 图木舒克市| 恩平市| 湖口县| 华容县| 浦城县| 镇原县| 双流县| 绥滨县| 安多县| 元朗区|