util

command module
v0.1.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 21, 2023 License: MIT Imports: 4 Imported by: 0

README

util 工具库

schedule

提供基于时间点任务调度器,用户可以对任务设置执行时间,当时间到达时,调度器会自动执行该任务


package main

import (
	"fmt"
	"strconv"
	"time"
	"util/schedule"
)

type DemoTask struct {
	timestamp int64
}

func (r *DemoTask) RunAt() int64 {
	return r.timestamp
}

func (r *DemoTask) Run(s *schedule.TimingSchedule) {
	t := time.Unix(r.timestamp, 0)
	fmt.Printf("do demo task. runAt:%s now:%s\n", t.String(), time.Now())
}

func (r *DemoTask) OnError(err error) {

}

type ErrTask struct {
	timestamp int64
}

func (r *ErrTask) RunAt() int64 {
	return r.timestamp
}

func (r *ErrTask) Run(s *schedule.TimingSchedule) {
	panic("panic on run ErrTask")
}

func (r *ErrTask) OnError(err error) {
	fmt.Println(err)
	panic("panic on error")
}

func NewDemoTask(time string) schedule.ITimingTask {
	t, _ := schedule.NewTodayTime(time)
	return &DemoTask{timestamp: t}
}

func NewErrTask(time string) schedule.ITimingTask {
	t, _ := schedule.NewTodayTime(time)
	return &ErrTask{timestamp: t}
}

func GetNextSecondTime() string {
	now := time.Now().Format(time.RFC3339)
	hour, _ := strconv.Atoi(now[11:13])
	min, _ := strconv.Atoi(now[14:16])
	second, _ := strconv.Atoi(now[17:19])

	if second == 59 && min == 59 {
		hour++
		return fmt.Sprintf("%02d:%02d:%02d", hour, min, second)
	}

	if second == 59 {
		min++
		return fmt.Sprintf("%02d:%02d:%02d", hour, min, second)
	}

	second++
	return fmt.Sprintf("%02d:%02d:%02d", hour, min, second)
}

func main() {
	s := schedule.NewTimingSchedule(2, 1, NewErrTask(GetNextSecondTime()))
	for i := 0; i < 5; i++ {
		s.Push(NewDemoTask(GetNextSecondTime()))
	}

	s.Start()

	time.Sleep(3 * time.Second)
}


Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL