time.Ticker и time.Timer - два таймерных механизма в Go:
// Timer - однократное срабатывание
timer := time.NewTimer(5 * time.Second)
<-timer.C // сработает один раз через 5 сек
timer.Stop() // освободить ресурсы если не нужен
// Ticker - периодическое срабатывание
ticker := time.NewTicker(1 * time.Second)
defer ticker.Stop() // обязательно остановить!
for t := range ticker.C {
fmt.Println("tick", t)
}
Важно:
ticker.Stop() обязателен - без него горутина и канал утекаютtime.After(d) - обертка над Timer, возвращает только канал (удобно в select)