在Go语言中,任务调度可以通过多种库来实现,这里介绍两个流行的库:tasksgocron

  1. tasks:这是一个简单易用的进程内调度器,专注于高频快速执行的任务。它支持并发运行任务,且设计上尽量减少调度器引入的抖动。使用 tasks,你可以指定任务的执行间隔,并且可以设置任务在特定的时间开始执行。例如,你可以设置一个任务每30秒执行一次,或者在30天后开始每30天执行一次。它还支持一次性任务和自定义错误处理。

示例代码:

   // Start the Scheduler
   scheduler := tasks.New()
   defer scheduler.Stop()
   // Add a task
   id, err := scheduler.Add(&tasks.Task{
       Interval: time.Duration(30 * time.Second),
       TaskFunc: func() error {
           // Put your logic here
       },
   })
   if err != nil {
       // Do Stuff
   }

更多信息请参考:

  1. gocron:这是一个基于人类友好语法的周期性任务调度包。它允许你使用简单的语法来定期执行Go函数。gocron 提供了丰富的API来配置任务,包括设置任务的名称、任务的执行次数、设置任务的标签、注册事件等。

示例代码:

   package main
   import (
       "fmt"
       "time"
       "github.com/go-co-op/gocron"
   )
   var task = func() {}
   func main() {
       s := gocron.NewScheduler(time.UTC)
       job, _ := s.Every(1).Second().Do(task)
       go func() {
           for {
               fmt.Println("Count of finished job runs", job.FinishedRunCount())
               time.Sleep(time.Second)
           }
       }()
       s.StartAsync()
   }

更多信息请参考:

这两个库各有特点,你可以根据你的具体需求选择合适的库来进行任务调度。