Esiste un modo per eseguire attività di background ripetitive in Go? Sto pensando a qualcosa come Timer.schedule(task, delay, period)
in Java. So che posso farlo con una goroutine e Time.sleep()
, ma mi piacerebbe qualcosa che si fermasse facilmente.C'è un modo per eseguire attività ripetitive a intervalli in Golang?
Ecco cosa ho ottenuto, ma mi sembra brutto. C'è un modo più pulito/migliore?
func oneWay() {
var f func()
var t *time.Timer
f = func() {
fmt.Println("doing stuff")
t = time.AfterFunc(time.Duration(5) * time.Second, f)
}
t = time.AfterFunc(time.Duration(5) * time.Second, f)
defer t.Stop()
//simulate doing stuff
time.Sleep(time.Minute)
}
Grazie per aver utilizzato time.Duration (x) nel tuo esempio. Ogni esempio che ho trovato ha un int hardcoded e si lamenta quando usi un v (int) o float. –
@MikeGraf puoi fare 't: = time.Tick (time.Duration (period) * time.Secondo) 'dove periodo è un' int' – florianrosenberg
questa soluzione sembra abbastanza buona, IMO. esp. se si chiama semplicemente f() invece del tempo esterno. AfterFunc. ottimo per i casi in cui vuoi lavorare x secondi dopo che il lavoro è terminato, contro un intervallo coerente. –