php小編百草為您介紹一種名為gocron的函數,它是一個標準函式庫實現,具備可測試的特性。 gocron函數的設計目的是為了提供一種簡單的方式來建立和管理定時任務。它可以幫助開發人員輕鬆地編寫和調度多個定時任務,同時還提供了靈活的測試功能,方便開發人員進行單元測試和功能驗證。無論是在開發環境或生產環境,gocron函數都是一個強大且可靠的工具,可用於實現各種複雜的定時任務需求。
我需要以一定的時間間隔執行作業(點擊休息端點,然後將訊息傳送到佇列)。目前我有這個功能,它使用 gocron - https://github.com/go-co-op/gocron
但是目前沒有停止該功能的機制,因此我無法乾淨地測試它。
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 }
它按要求執行,並以所需的時間間隔運行參數化函數,但我確信必須有一個更清晰的解決方案 - 可能是標準庫。
您可以只傳回 .stop
函數:
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 }
然後在您的測試中您可以執行以下操作:
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") }
以上是gocron函數的標準函式庫實作(可測試)的詳細內容。更多資訊請關注PHP中文網其他相關文章!