在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秒后停止定时任务。