gocron函数的标准库实现(可测试)

2024年 2月 15日 48.3k 0

gocron函数的标准库实现(可测试)

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函数的标准库实现(可测试)的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论