package main import ( "context" "time" ) func FuncTicker(interval time.Duration, ctx context.Context, fn func(context.Context) error) func() error { return func() error { ticker := time.NewTicker(interval) defer ticker.Stop() for { select { case <-ctx.Done(): return nil case <-ticker.C: } if err := fn(ctx); err != nil { return err } } } }