在Go语言中,可以使用 time
包和 goroutine
来封装定时任务。以下是一个示例代码:
package main import ( "fmt" "time" ) func main() { // 创建一个定时任务 task := NewTask(5*time.Second, func() { fmt.Println("定时任务执行") }) // 启动定时任务 task.Start() // 等待一段时间 time.Sleep(10 * time.Second) // 停止定时任务 task.Stop() } type Task struct { interval time.Duration fn func() stopChan chan struct{} } func NewTask(interval time.Duration, fn func()) *Task { return &Task{ interval: interval, fn: fn, stopChan: make(chan struct{}), } } func (t *Task) Start() { go func() { ticker := time.NewTicker(t.interval) defer ticker.Stop() for { select { case <-ticker.C: t.fn() case <-t.stopChan: return } } }() } func (t *Task) Stop() { close(t.stopChan) }
在上述示例中,我们定义了一个 Task
结构体来封装定时任务。 NewTask
函数用于创建一个新的定时任务对象,接受一个时间间隔和一个函数作为参数。 Start
方法用于启动定时任务,使用 goroutine
来定期执行传入的函数。 Stop
方法用于停止定时任务,通过关闭 stopChan
通道来通知定时任务停止执行。
在 main
函数中,我们创建一个定时任务对象,每隔5秒执行一次打印操作。然后启动定时任务,并等待10秒后停止定时任务。