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

Golang cron 定時器和定時任務(wù)的使用場景

 更新時間:2022年09月30日 14:23:43   作者:beyond阿亮  
Ticker是一個周期觸發(fā)定時的計時器,它會按照一個時間間隔往channel發(fā)送系統(tǒng)當(dāng)前時間,而channel的接收者可以以固定的時間間隔從channel中讀取事件,這篇文章主要介紹了Golang cron 定時器和定時任務(wù),需要的朋友可以參考下

Golang cron 定時器和定時任務(wù)

Golang中time包有兩個定時器,分別為 ticker 和 timer。兩者都可以實現(xiàn)定時功能,但各自都有自己的使用場景。

timer和ticker的區(qū)別

  • ticker定時器表示每隔一段時間就執(zhí)行一次,一般可執(zhí)行多次。
  • timer定時器表示在一段時間后執(zhí)行,默認情況下只執(zhí)行一次,如果想再次執(zhí)行的話,每次都需要調(diào)用 time.Reset() 方法,此時效果類似ticker定時器。同時也可以調(diào)用 Stop() 方法取消定時器
  • timer定時器比ticker定時器多一個 Reset() 方法,兩者都有 Stop() 方法,表示停止定時器,底層都調(diào)用了stopTimer() 函數(shù)。

Timer

Timer是一個定時器。代表未來的一個單一事件,你可以告訴timer你要等待多長時間。

package main

import (
    "fmt"
    "time"
)

func main() {

    //設(shè)置定時器為3秒
    timer := time.NewTimer(3 * time.Second)
    fmt.Println("當(dāng)前時間為:", time.Now())

    t := <-timer.C //從定時器拿數(shù)據(jù)
    fmt.Println("當(dāng)前時間為:", t)
}

Ticker

Ticker是一個周期觸發(fā)定時的計時器,它會按照一個時間間隔往channel發(fā)送系統(tǒng)當(dāng)前時間,而channel的接收者可以以固定的時間間隔從channel中讀取事件。

Ticker是一個定時觸發(fā)的計時器,
它會以一個間隔(interval)往channel發(fā)送一個事件(當(dāng)前時間),
而channel的接收者可以以固定的時間間隔從channel中讀取事件。

package main

import (
    "fmt"
    "time"
)

func main() {

    //創(chuàng)建一個周期性的定時器
    ticker := time.NewTicker(3 * time.Second)
    fmt.Println("當(dāng)前時間為:", time.Now())

    go func() {
        for {

            //從定時器中獲取數(shù)據(jù)
            t := <-ticker.C
            fmt.Println("當(dāng)前時間為:", t)

        }
    }()

    for {
        time.Sleep(time.Second * 1)
    }
}

cron 定時任務(wù)

package main

import (
	"github.com/robfig/cron"
	"log"
	"time"
)

func main() {
	//cron1()

	//cron2()

	cron3()

	select {
	}
}

func cron1()  {
	log.Println("Starting...")
	c := cron.New()
	c.AddFunc("* * * * * *", func() {
		log.Println("Run models.CleanAllTag...")
	})
	c.AddFunc("* * * * * *", func() {
		log.Println("Run models.CleanAllArticle...")
	})

	c.Start()

	t1 := time.NewTimer(time.Second * 10)
	for {
	select {
	case <-t1.C:
	    t1.Reset(time.Second * 10)
	}
	}
}

func cron2()  {
	log.Println("Starting...")
	c := cron.New()  // 新建一個定時任務(wù)對象
	c.AddFunc("* * * * * *", func() {
		log.Println("hello world")
	})  // 給對象增加定時任務(wù)
	c.Start()
	//select {
	//}
	time.Sleep(10 * time.Second)
	c.Stop()
}

func cron3()  {
	log.Println("Starting...")

	c := cron.New()
	h := Hello{"I Love You!"}
	// 添加定時任務(wù)
	c.AddJob("*/2 * * * * *", h)
	// 添加定時任務(wù) 5秒執(zhí)行一次
	c.AddFunc("*/5 * * * * *", func() {
		log.Println("hello word")
	})

	s, err := cron.Parse("*/3 * * * * *")
	if err != nil {
		log.Println("Parse error")
	}
	h2 := Hello{"I Hate You!"}
	c.Schedule(s, h2)
	// 其中任務(wù)
	c.Start()
	// 關(guān)閉任務(wù)
	defer c.Stop()
}

type Hello struct {
	Str string
}

func(h Hello) Run() {
	log.Println(h.Str)
}

參考鏈接:

https://blog.haohtml.com/archives/19859
https://studygolang.com/articles/17624
https://www.jianshu.com/p/fd3dda663953
https://blog.51cto.com/u_13914991/2294357
https://www.cnblogs.com/yinzhengjie/p/12244385.html
http://t.zoukankan.com/yinzhengjie-p-12245289.html
https://blog.51cto.com/u_13914991/2294357

到此這篇關(guān)于Golang cron 定時器和定時任務(wù)的文章就介紹到這了,更多相關(guān)Golang cron 定時任務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解prometheus監(jiān)控golang服務(wù)實踐記錄

    詳解prometheus監(jiān)控golang服務(wù)實踐記錄

    這篇文章主要介紹了詳解prometheus監(jiān)控golang服務(wù)實踐記錄,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Go 并發(fā)編程Goroutine的實現(xiàn)示例

    Go 并發(fā)編程Goroutine的實現(xiàn)示例

    Go語言中的并發(fā)編程主要通過Goroutine和Channel來實現(xiàn),本文就來介紹一下Go 并發(fā)編程的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • golang調(diào)用windows平臺的dll庫的方法實現(xiàn)

    golang調(diào)用windows平臺的dll庫的方法實現(xiàn)

    本文主要介紹了golang調(diào)用windows平臺的dll庫的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • Go整合captcha實現(xiàn)驗證碼功能

    Go整合captcha實現(xiàn)驗證碼功能

    最近在使用Go語言搞一個用戶登錄&注冊的功能,我們油然會產(chǎn)生一種增加驗證碼的想法。后來在GitHub上找到了這個名叫captcha的插件,于是就利用文檔進行了初步的學(xué)習(xí),并融入到自己的項目中,整個過程下來感覺這個插件的設(shè)計非常巧妙
    2023-03-03
  • Golang實現(xiàn)多存儲驅(qū)動設(shè)計SDK案例

    Golang實現(xiàn)多存儲驅(qū)動設(shè)計SDK案例

    這篇文章主要介紹了Golang實現(xiàn)多存儲驅(qū)動設(shè)計SDK案例,Gocache是一個基于Go語言編寫的多存儲驅(qū)動的緩存擴展組件,更多具體內(nèi)容感興趣的小伙伴可以參考一下
    2022-09-09
  • Golang 實現(xiàn)Socket服務(wù)端和客戶端使用TCP協(xié)議通訊

    Golang 實現(xiàn)Socket服務(wù)端和客戶端使用TCP協(xié)議通訊

    這篇文章主要介紹了Golang 實現(xiàn)Socket服務(wù)端和客戶端使用TCP協(xié)議通訊,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Go語言排序與接口實例分析

    Go語言排序與接口實例分析

    這篇文章主要介紹了Go語言排序與接口,實例分析了排序與接口的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • 利用Golang如何調(diào)用Linux命令詳解

    利用Golang如何調(diào)用Linux命令詳解

    這篇文章主要給大家介紹了Golang中使用os/exec來執(zhí)行 Linux 命令的相關(guān)資料,文中給出了詳細的示例代碼,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • 淺談Go數(shù)組比切片好在哪

    淺談Go數(shù)組比切片好在哪

    Go1.17 會正式支持切片轉(zhuǎn)換到數(shù)據(jù),不再需要用以前那種騷辦法了,本文就談?wù)凣o數(shù)組比切片好在哪,感興趣的可以了解一下
    2021-09-09
  • go語言如何使用gin庫實現(xiàn)SSE長連接

    go語言如何使用gin庫實現(xiàn)SSE長連接

    所謂長連接指在一個TCP連接上可以連續(xù)發(fā)送多個數(shù)據(jù)包,在TCP連接保持期間,如果沒有數(shù)據(jù)包發(fā)送,需要雙方發(fā)檢測包以維持此連接,一般需要自己做在線維持,下面這篇文章主要給大家介紹了關(guān)于go語言如何使用gin庫實現(xiàn)SSE長連接的相關(guān)資料,需要的朋友可以參考下
    2023-06-06

最新評論

惠水县| 新巴尔虎右旗| 兖州市| 怀柔区| 泸州市| 凤庆县| 凯里市| 来凤县| 闽清县| 盐亭县| 江华| 石楼县| 永康市| 建水县| 龙陵县| 长丰县| 威海市| 盱眙县| 渝中区| 奉节县| 杨浦区| 凤山市| 夏河县| 开原市| 开江县| 逊克县| 息烽县| 嘉善县| 洪江市| 阳春市| 景东| 高台县| 锡林郭勒盟| 安徽省| 莆田市| 龙海市| 和龙市| 灌南县| 泾川县| 肇庆市| 漾濞|