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

golang定時任務(wù)cron項目實操指南

 更新時間:2022年12月26日 09:33:59   作者:DaSheng1104  
Go實現(xiàn)的cron 表達式的基本語法跟linux 中的 crontab基本是類似的,下面這篇文章主要給大家介紹了關(guān)于golang定時任務(wù)cron項目實操的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下

一、簡介:

1、cron包

cron包:"github.com/robfig/cron/v3"

文檔:cron package - github.com/robfig/cron - Go Packages

2、表達式,go cron使用的和 Linux crontab 一樣的表達式

# 文件格式說明
# ┌──分鐘(0 - 59)
# │  ┌──小時(0 - 23)
# │  │  ┌──日(1 - 31)
# │  │  │  ┌─月(1 - 12)
# │  │  │  │  ┌─星期(0 - 6,表示從周日到周六)
# │  │  │  │  │
# *  *  *  *  * 被執(zhí)行的命令
 

3、新老版本區(qū)別

老版本的最大區(qū)別在于如果需要秒級定義,需要額外傳入?yún)?shù),并且可以自由配置參數(shù)

c := cron.New(cron.WithSeconds())  // 秒級操作cron.WithSeconds()

 代碼示例

package main
 
import (
	"fmt"
	"github.com/robfig/cron/v3"
	"log"
	"os"
)
 
func RunCron() {
	c := cron.New(cron.WithSeconds(), cron.WithChain(cron.SkipIfStillRunning(cron.DefaultLogger)), cron.WithLogger(
		cron.VerbosePrintfLogger(log.New(os.Stdout, "cron: ", log.LstdFlags))))
	i := 1
	EntryID, err := c.AddFunc("*/5 * * * * *", func() {
		fmt.Println(time.Now(), "每5s一次----------------", i)
		time.Sleep(time.Second *6)
		i++
	})
	fmt.Println(time.Now(), EntryID, err)
 
	c.Start()
    select()
}
func main() {
	RunCron()
}

多任務(wù) AddJob

package main
 
import (
   "fmt"
   "github.com/robfig/cron/v3"
)
 
type Job1 struct {
}
 
func (t Job1) Run() {
   fmt.Println(time.Now(), "I'm Job1")
}
 
type Job2 struct {
}
 
func (t Job2) Run() {
   fmt.Println(time.Now(), "I'm Job2")
}
 
func RunCron() {
   c := cron.New(cron.WithSeconds())
 
   EntryID, err := c.AddJob("*/5 * * * * *", Job1{})
   fmt.Println(time.Now(), EntryID, err)
 
   EntryID, err = c.AddJob("*/10 * * * * *", Job2{})
   fmt.Println(time.Now(), EntryID, err)
 
   c.Start()
   select()
}
func main() {
   RunCron()
}

二、項目實操

數(shù)據(jù)統(tǒng)計系統(tǒng) statsys 每天凌晨定時統(tǒng)計前一天運營數(shù)據(jù)

1、啟動daemon 守護進程

package main
 
import (
	"github.com/robfig/cron/v3"
	logger "github.com/sirupsen/logrus"
	"statsys/scheduler/crob_job"  // 這里引入你的任務(wù)
)
 
 
 
func printLog(crobJob string, err error) {
	if err != nil {
		logger.Errorf("Start %s Error, err: %v", crobJob, err)
	} else {
		logger.Infof("Start %s Successful!", crobJob)
	}
}
 
func RunCron() {
	c := cron.New()
 
	// 收入數(shù)據(jù)統(tǒng)計 定時任務(wù)(每天凌晨00:01:00)執(zhí)行
	_, err := c.AddJob("1 0 * * *", &crob_job.DeliveryIncomeStatJob) 
	printLog("IncomeStatJob", err)
 
	// 支出數(shù)據(jù)統(tǒng)計 定時任務(wù)(每天凌晨00:03:00)執(zhí)行
	_, err = c.AddJob("3 0 * * *", &crob_job.PaymentStatJob)
	printLog("PaymentStatJob", err)
 
	
 
	// 啟動一個新的 goroutine 做循環(huán)檢測
	c.Start()
	select {}
}
 
func main() {
	RunCron()
}

2、統(tǒng)計任務(wù)

// 支出數(shù)據(jù)統(tǒng)計定時任務(wù)
package crob_job
 
 
type paymentStatJob struct {
	amountStatDataBase *amount_stat.AmountDataBase
}
 
// 單利
var (
	PaymentStatJob = paymentStatJob{}
)
 
func (this *paymentStatJob) Run() {
	logger.Warningln(">>>>>>>>>>>>> Start paymentStat")
 
    startTime := "2022-01-02"
    endTime := "2022-01-01"
	// 查詢統(tǒng)計數(shù)據(jù)
	dataList, code := brawn.StationAccountSrv.GetPaymentDate(startTime, endTime)
	if code != ecode.SUCC {
		logger.Errorf("支出數(shù)據(jù)統(tǒng)計定時任務(wù) errCode: %v", code)
		return
	}
 
	if len(dataList) <= 0 {
		logger.Warningln(" >>>>>>>> 暫無 支出數(shù)據(jù) <<<<<<<<")
		return
	}
 
	// 保存支付統(tǒng)計數(shù)據(jù)
	this.amountStatDao.SavePaymentStatData(dataList...)
 
	logger.Warningln("<<<<<<<<<<<<< End paymentStat")
}

... 具體你的項目多個任務(wù)

執(zhí)行結(jié)果

總結(jié)

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

相關(guān)文章

  • 基于Golang實現(xiàn)YOLO目標檢測算法

    基于Golang實現(xiàn)YOLO目標檢測算法

    目標檢測是計算機視覺領(lǐng)域的重要任務(wù),它不僅可以識別圖像中的物體,還可以標記出物體的位置和邊界框,YOLO是一種先進的目標檢測算法,以其高精度和實時性而聞名,本文將介紹如何使用Golang實現(xiàn)YOLO目標檢測算法,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2023-11-11
  • 使用gin框架搭建簡易服務(wù)的實現(xiàn)方法

    使用gin框架搭建簡易服務(wù)的實現(xiàn)方法

    go語言web框架挺多的,本文就介紹了一下如何使用gin框架搭建簡易服務(wù)的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Go語言中Seeker接口的用法詳解

    Go語言中Seeker接口的用法詳解

    Go語言標準庫中的io包提供了一系列接口,用于處理各種I/O操作,其中Seeker接口在處理大文件或需要隨機訪問的場景中非常有用,本文將結(jié)合具體案例,詳細介紹Go語言中io包的Seeker接口的用法,需要的朋友可以參考下
    2024-10-10
  • GoLang實現(xiàn)日志收集器流程講解

    GoLang實現(xiàn)日志收集器流程講解

    這篇文章主要介紹了GoLang實現(xiàn)日志收集器流程,看日志是開發(fā)者平時排查BUG所必須的掌握的技能,但是日志冗雜,所以寫個小工具來收集這些日志幫助我們排查BUG,感興趣想要詳細了解可以參考下文
    2023-05-05
  • Go語言中高效地處理集合的方法小結(jié)

    Go語言中高效地處理集合的方法小結(jié)

    在?Go?語言中,處理集合(如切片、映射等)時,可以通過多種方式提高效率,本文為大家整理了一些常見的方法,有需要的小伙伴可以了解一下
    2025-02-02
  • Go語言實現(xiàn)文件上傳

    Go語言實現(xiàn)文件上傳

    這篇文章主要為大家詳細介紹了Go語言實現(xiàn)文件上傳,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • 基于Go語言實現(xiàn)一個并發(fā)下載器

    基于Go語言實現(xiàn)一個并發(fā)下載器

    這篇文章主要為大家詳細介紹了如何利用GO語言實現(xiàn)一個并發(fā)的文件下載器,可以在不重新啟動整個下載的情況下處理錯誤,感興趣的小伙伴可以了解一下
    2023-10-10
  • Go語言讀寫鎖RWMutex的源碼分析

    Go語言讀寫鎖RWMutex的源碼分析

    本篇文章我們將一起來學(xué)習(xí)下Go語言中的讀寫鎖sync.RWMutex。文中的示例講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-10-10
  • golang開發(fā)go包依賴管理godep使用教程

    golang開發(fā)go包依賴管理godep使用教程

    這篇文章主要為大家介紹了golang開發(fā)go包依賴管理godep使用教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-11-11
  • go按行讀取文件的三種實現(xiàn)方式匯總

    go按行讀取文件的三種實現(xiàn)方式匯總

    最近有遇到需要用go讀取文件的情況,下面這篇文章主要給大家介紹了關(guān)于go按行讀取文件的三種實現(xiàn)方式,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-09-09

最新評論

东乌珠穆沁旗| 通榆县| 长丰县| 姜堰市| 离岛区| 唐海县| 金川县| 乌兰察布市| 依兰县| 班戈县| 涟源市| 福贡县| 潼关县| 焉耆| 阳东县| 原阳县| 黑河市| 奈曼旗| 香河县| 吉隆县| 桂阳县| 南安市| 老河口市| 海丰县| 西平县| 临汾市| 外汇| 岑巩县| 宁国市| 博湖县| 正阳县| 永宁县| 大石桥市| 望谟县| 呼和浩特市| 女性| 邵阳县| 新竹县| 齐河县| 康定县| 和林格尔县|