定期的に実行したい何かがあって、そしてそのインターバルにjitterが入っていてほしいということがしばしばあり、必要な時に都度そういうコードを書いていたのですが、毎度書くのもしんどいな〜と思ったのでこの度ライブラリにしたという次第です。
READMEのUsageに書いてあるとおり、
package main import ( "context" "log" "time" "github.com/moznion/jicker" ) func main() { ctx, cancelFunc := context.WithCancel(context.Background()) defer cancelFunc() c := jicker.NewJicker().Tick(ctx, 1*time.Second, 0.05) for t := range c { log.Printf("tick: %v", t) } }
というふうに Tick()
を使用すると、1秒に対して±5% jitterがかかったインターバル (すなわち0.95秒から1.05秒の間でランダムなインターバル) おきにtickしてくれるtickerを得ることができます。
package main import ( "context" "log" "time" "github.com/moznion/jicker" ) func main() { ctx, cancelFunc := context.WithCancel(context.Background()) defer cancelFunc() c, err := jicker.NewJicker().TickBetween(ctx, 1*time.Second, 2*time.Second) if err != nil { log.Fatal(err) } for t := range c { log.Printf("tick: %v", t) } }
一方別の関数 TickBetween()
を使用すると、任意の区間でjitterがかかったインターバル (この場合1秒から2秒の間でランダムなインターバル) おきにtickしてくれるtickerがやってきます。
「実家」のような名前のライブラリですが今年のゴールデンウィークは実家に帰れません。世界が大変ですね。
小粒なライブラリですが、ぜひご利用くださいませ。