45 lines
1.3 KiB
Go
45 lines
1.3 KiB
Go
package timerx
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
)
|
|
|
|
type timerStr struct {
|
|
Callback callback // 需要回调的方法
|
|
CanRunning chan (struct{}) // 是否允许执行
|
|
BeginTime time.Time // 初始化任务的时间
|
|
NextTime time.Time // [删]下一次执行的时间
|
|
SpaceTime time.Duration // 任务间隔时间
|
|
TaskId string // 任务ID 全局唯一键
|
|
ExtendData interface{} // 附加参数
|
|
JobType JobType // 任务类型
|
|
JobData *JobData // 任务时间数据
|
|
}
|
|
|
|
type JobType string
|
|
|
|
const (
|
|
JobTypeEveryDay JobType = "every_day"
|
|
JobTypeEveryHour JobType = "every_hour"
|
|
JobTypeEveryMinute JobType = "every_minute"
|
|
JobTypeEverySecond JobType = "every_second"
|
|
JobTypeEveryMonth JobType = "every_month"
|
|
// 根据间隔时间执行
|
|
JobTypeInterval JobType = "interval"
|
|
)
|
|
|
|
type JobData struct {
|
|
Month *time.Month // 每年的第几个月
|
|
Weekday *time.Weekday // 每周的周几
|
|
Day *int // 每月的第几天
|
|
Hour *int // 每天的第几个小时
|
|
Minute *int // 每小时的第几分钟
|
|
Second *int // 每分钟的第几秒
|
|
}
|
|
|
|
var nextTime = time.Now() // 下一次执行的时间
|
|
|
|
// 定义各个回调函数
|
|
type callback func(ctx context.Context, extendData interface{}) error
|