php小編百草為您介紹一種名為gocron的函數(shù),它是一個(gè)標(biāo)準(zhǔn)庫實(shí)現(xiàn),具備可測(cè)試的特性。gocron函數(shù)的設(shè)計(jì)目的是為了提供一種簡(jiǎn)便的方式來創(chuàng)建和管理定時(shí)任務(wù)。它可以幫助開發(fā)人員輕松地編寫和調(diào)度多個(gè)定時(shí)任務(wù),同時(shí)還提供了靈活的測(cè)試功能,方便開發(fā)人員進(jìn)行單元測(cè)試和功能驗(yàn)證。無論是在開發(fā)環(huán)境還是生產(chǎn)環(huán)境,gocron函數(shù)都是一個(gè)強(qiáng)大而可靠的工具,可用于實(shí)現(xiàn)各種復(fù)雜的定時(shí)任務(wù)需求。
問題內(nèi)容
我需要按一定的時(shí)間間隔運(yùn)行作業(yè)(點(diǎn)擊休息端點(diǎn),然后將消息發(fā)送到隊(duì)列)。目前我有這個(gè)功能,它使用 gocron – https://github.com/go-co-op/gocron
但是目前沒有停止該功能的機(jī)制,因此我無法干凈地測(cè)試它。
func RunSchedule(cronExpression string, myFunction func()) error { scheduler := gocron.NewScheduler(time.UTC) _, err := scheduler.Cron(cronExpression).StartImmediately().Do(myFunction) if err != nil { return err } scheduler.StartBlocking() return nil }
登錄后復(fù)制
它按要求執(zhí)行,并以所需的時(shí)間間隔運(yùn)行參數(shù)化函數(shù),但我確信必須有一個(gè)更清晰的解決方案 – 可能是標(biāo)準(zhǔn)庫。
解決方法
您可以只返回 .stop
函數(shù):
func runschedule(cronexpression string, myfunction func()) (stop func(), err error) { scheduler := gocron.newscheduler(time.utc) _, err = scheduler.cron(cronexpression).startimmediately().do(myfunction) if err != nil { return nil, err } go func() { scheduler.startblocking() }() return scheduler.stop, nil }
登錄后復(fù)制
然后在您的測(cè)試中您可以執(zhí)行以下操作:
called := 0 stop, err := RunSchedule("some-schedule", func() { called++ }) time.Sleep(time.Second * 1) // whatever you need to do stop() if called != 1 { t.Fail("called should be 1") }
登錄后復(fù)制