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

Go語言中定時器cron的基本使用教程

 更新時間:2018年01月11日 10:48:51   作者:潘軍杰  
這篇文章主要給大家介紹了關于Go語言中定時器cron使用的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。

cron是什么

cron的意思就是:計劃任務,說白了就是定時任務。我和系統(tǒng)約個時間,你在幾點幾分幾秒或者每隔幾分鐘跑一個任務(job),就那么簡單。

前言

cron 是 robfig 開發(fā)的一個定時作業(yè)庫,robfig 總是想的比別人早,給了我們這些 Gopher 不少急需的東西,想當年 revel 的出現(xiàn)也是這樣的。看看 cron 的使用,還是一如既往的簡潔明了,發(fā)現(xiàn) Go 的世界里,有些產品還是有鮮明的個人特質的,那就是所謂的個人魅力吧?!

總之 robfig 開發(fā)的產品都是有一定超前性,比較有理論基礎,使用起來很簡單的東西。

下面看看怎么用 cron 吧:

c := cron.New()
c.AddFunc("0 30 * * * *", func() { fmt.Println("Every hour on the half hour") })
c.AddFunc("@hourly", func() { fmt.Println("Every hour") })
c.AddFunc("@every 1h30m", func() { fmt.Println("Every hour thirty") })
c.Start()

首先實例化一個 cron 對象 c,然后調用實例 c 的 AddFunc 函數(shù),AddFunc 函數(shù)接收一個定時表達式和一個普通函數(shù),最后開始執(zhí)行實例,定時作業(yè)就好了。

首先接收的普通函數(shù),就是我們業(yè)務的東西了,比如我們想打印 Hello World! 一行字符串,我們這么寫這樣的函數(shù):

func PrintSomeWord(){
fmt.Sprint("Hello World!")
}

PrintSomeWord 寫好了,接下來想每秒鐘打印一次,這時 cron 就派上用場了:

c := cron.New()
c.AddFunc("@every 1s",PrintSomeWord)
c.Start()

這么說來,普通函數(shù)是隨我們的業(yè)務決定的,我們暫且不談了,而定時表達式才是我們要學習的東西。我們從 cron 的名字,很容易聯(lián)想到 Linux 系統(tǒng)的 cron 定時器來,它們是不是存在一定的關系呢?從下面的使用情況來看,答案是的。仔細看它們的定時表達式是非常相似的,這樣就好辦了,大大降低了使用 cron 的門檻,畢竟 Linux 的 cron 是一個標準來的。

我們看看 cron 普通的表達式:

c.AddFunc("@every 1h30m", func() { fmt.Println("Every hour thirty") })
c.AddFunc("@daily", func() { fmt.Println("Every day") })
c.AddFunc("@hourly", func() { fmt.Println("Every hour") })

這三行代碼的定時表達式分別表示:每1小時30分鐘執(zhí)行一次,每天執(zhí)行一次,每小時執(zhí)行一次。

@every 很廣,修改后綴,就可以表示不同的用途,比如 秒 分 小時 天,看看代碼:

@every 1s
@every 1m
@every 1h
@every 1d

怎么樣很有規(guī)律吧?

更往深一點,可能就是嫌棄 @every 還不夠簡潔了,比如:

@every 1h
@every 1d
@every 30d

每小時 每天 每月 完全可以不用后綴了:

@hourly
@daily
@monthly

當然簡潔是好的,但簡潔的同時往往也有些無法做到簡潔的情況,比如上面提到的:

@every 1h30m

不用后綴是不行了吧?

最不好理解的可能是以下的表達式了,因為看這種表達式,就好比看一堆正則表達式一樣,讓一般人懵逼:

c.AddFunc("0 30 * * * *", func() { fmt.Println("Every hour on the half hour") })

定時表達式 0 30 * * * * 到底是什么意思啊?第一印象,毫無規(guī)律性,不知道什么意思,如果翻譯 Every hour on the half hour 這句洋文,倒是有點概念了,意思就是“每一小時半(1.5個小時)執(zhí)行一次” 嘛?。。?/p>

額,看到0 30和六個占位數(shù),推理一下:是不是 秒 分 時 天 月 年 ?。克坪跤忻济?,我也想知道這個表達式的具體使用辦法,只能下次認真學習后,一起說道說道了。

Go 定時器 cron 表達式的使用

如果想更靈活的使用定時,可能會涉及到更復雜的六位表達式的使用方法,如每半小時執(zhí)行一次:

0 30 * * * *

六位的表達式看起來,有點費解,好比正則表達式一樣,我們需要按步驟來理解;

理解六個作用域的意義

0 0 0 1 1 *
0 0 0 1 * *
0 0 0 * * 0
0 0 0 * * *
0 0 * * * *

如上表達式,都是六位占位符,可以是數(shù)字和字符,其中字符是特定字符包括:【* / , - ? JAN-DEC SUN-SAT】

我們叫它為六個作用域吧,從左到右的順序,代表的含義是 秒鐘域(1) 分鐘域(2) 小時域(3) 日期域(4) 月份域(5) 星期域(6)

月份域可以使用 JAN-DEC 和星期域可以使用SUN-SAT,分別表示 1-12月的英文縮寫和星期一至星期日的英文簡寫,如果不了解月份和星期英文簡寫,建議使用數(shù)字表示,因為這個需要記憶和大小寫敏感的,容易出錯。

下面列出方便理解:

1至12月份的英文簡寫:Jan Feb Mar Apr May Jun Jul Aug Sept Oct Nov Dec

星期一至星期日的英文簡寫:Mon Tues Wed Thurs Fri Sat Sun

六個作用域還可以使用的特定字符:

特定字符星號( *)

星號表示匹配所有合理的值,可以存在任何域。比如第月份域(5)的位置使用星號*,表示每個月都執(zhí)行;同理在星期域(6)的位置使用星號,表示每個星期都執(zhí)行;其他占位使用它以此類推。

特定字符斜劃線 (/)

斜劃線通常用于一個范圍增量,可以存在任何域。比如在分鐘域(2)的位置使用 3-59/15 表示一個小時的第3分鐘到59分鐘時間范圍內,每15分鐘執(zhí)行一次。

特定字符逗號 (,)

逗號用于分隔多個點,可以存在任何域。比如在星期域(6)的位置使用 MON,WED,FRI 表示星期一、星期三、星期五這三個點都滿足條件。

特定字符中橫杠 (-)

中橫杠通常用于定義范圍,可以存在任何域。 例如小時域(3)的位置使用 9-17 表示起始9點到截止17點這個時間段范圍。

特定字符問號 (?)

問號表示不確定一個點的意思,只能在日期域(4) 星期域(6)的位置使用,表示指定的值不確定性,一個表達式中只能用一次問號?,如果在日期域(4)使用了,就不能再星期域(6)上用了。它和星號是有區(qū)別的,星號表示匹配所有點,就是說一個月哪一天,哪個星期都可以,而問號,表示一個月的不確定哪一天或是一周不確定哪一天都行,這個是很難理解的,需要說一些具體的情況來解釋,比如2月的第18天,剛好是第三周的第2天,那么如果在日期域(4)定義18,星期域(6)定義2這樣就重疊定義了,這個 cron 是不允許的。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關文章

  • 一步步教你在Linux上安裝Go語言環(huán)境

    一步步教你在Linux上安裝Go語言環(huán)境

    本文將介紹如何在Linux操作系統(tǒng)下搭建Go語言環(huán)境,Go語言是一種開源的編程語言,具有高效、簡潔和并發(fā)性強的特點,適用于開發(fā)各種類型的應用程序,搭建Go語言環(huán)境是開始學習和開發(fā)Go語言項目的第一步,本文將詳細介紹安裝Go語言、配置環(huán)境變量以及驗證安裝是否成功的步驟
    2023-10-10
  • go連接mysql的項目實踐

    go連接mysql的項目實踐

    本文主要介紹了go連接mysql的項目實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • Go語言函數(shù)學習教程

    Go語言函數(shù)學習教程

    這篇文章主要介紹了Go語言函數(shù)基本用法,結合實例形式分析了Go語言函數(shù)的格式、定義、使用方法與相關注意事項,需要的朋友可以參考下
    2016-07-07
  • Go語言流程控制詳情

    Go語言流程控制詳情

    這篇文章主要介紹了Go語言流程控制詳情,流程控制包含分三大類:條件判斷,循環(huán)控制和無條件跳轉。下面關于更多相關內容需要的小伙伴可以參考一下
    2022-03-03
  • 一文帶你了解Go語言中的指針和結構體

    一文帶你了解Go語言中的指針和結構體

    前面的兩篇文章對?Go?語言的基礎語法和基本數(shù)據(jù)類型以及幾個復合數(shù)據(jù)類型進行介紹,本文將對?Go?里面的指針和結構體進行介紹,也為后續(xù)文章做鋪墊,感興趣的可以了解一下
    2022-11-11
  • Go引用github包的詳細流程步驟

    Go引用github包的詳細流程步驟

    這篇文章主要給大家介紹了關于Go引用github包的詳細流程步驟,文中通過圖文介紹的非常詳細,對大家學習或者使用Go具有一定的參考價值,需要的朋友可以參考下
    2024-02-02
  • Go語言常用的打log方式詳解

    Go語言常用的打log方式詳解

    Golang的log包短小精悍,可以非常輕松的實現(xiàn)日志打印轉存功能,下面這篇文章主要給大家介紹了關于Go語言常用的打log方式的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-10-10
  • go?time.After優(yōu)化后性能提升34%內存減少67%

    go?time.After優(yōu)化后性能提升34%內存減少67%

    這篇文章主要介紹了go語言time.After優(yōu)化后性能提升34%內存減少67%實例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • 詳解Go語言strconv與其他基本數(shù)據(jù)類型轉換函數(shù)的使用

    詳解Go語言strconv與其他基本數(shù)據(jù)類型轉換函數(shù)的使用

    這篇文章將以 string 類型為中心,通過 strconv 標準庫,介紹其與其他基本數(shù)據(jù)類型相互轉換的函數(shù)。文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-12-12
  • golang NewRequest/gorequest實現(xiàn)http請求的示例代碼

    golang NewRequest/gorequest實現(xiàn)http請求的示例代碼

    本文主要介紹了golang NewRequest/gorequest實現(xiàn)http請求的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08

最新評論

海宁市| 城口县| 龙江县| 读书| 瑞昌市| 怀宁县| 小金县| 邯郸县| 纳雍县| 元阳县| 吴堡县| 泰宁县| 莱西市| 揭阳市| 广东省| 毕节市| 宜兰市| 天长市| 正镶白旗| 青铜峡市| 绥芬河市| 奉贤区| 钟山县| 肃宁县| 宁城县| 太仆寺旗| 鲜城| 榆中县| 荔浦县| 安西县| 迁安市| 凤翔县| 长沙市| 松桃| 防城港市| 环江| 庆安县| 辽宁省| 且末县| 保亭| 隆安县|