⏱️
Goでcronを扱う
このライブラリを使います
$ go get github.com/robfig/cron/v3
cronを実行する
package main
import (
"github.com/robfig/cron/v3"
"log"
"time"
)
func main() {
c := cron.New()
c.AddFunc("@every 1s", func() { log.Println("every 1s") })
c.AddFunc("* * * * *", func() { log.Println("every 1m") })
c.Start()
time.Sleep(2 * time.Minute)
}
$ go run main.go
2022/07/18 17:00:57 every 1s
2022/07/18 17:00:58 every 1s
2022/07/18 17:00:59 every 1s
2022/07/18 17:01:00 every 1m
2022/07/18 17:01:00 every 1s
2022/07/18 17:01:01 every 1s
...
cronの書式にバリデーションをかける
func main() {
p := cron.NewParser(cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow)
s, err := p.Parse("* * * *")
if err != nil {
panic(err)
}
fmt.Println(s)
}
$ go run main.go
panic: expected exactly 5 fields, found 4: [* * * *]
...
cronの実行スケジュールを確認する
func main() {
p := cron.NewParser(cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow)
s, err := p.Parse("* * * * *")
if err != nil {
log.Fatal(err)
}
t := time.Now()
for i := 0; i < 5; i++ {
t = s.Next(t)
fmt.Println(t)
}
}
$ go run main.go
2022-07-18 17:16:00 +0900 JST
2022-07-18 17:17:00 +0900 JST
2022-07-18 17:18:00 +0900 JST
2022-07-18 17:19:00 +0900 JST
2022-07-18 17:20:00 +0900 JST
Discussion