time.Ticker отправляет значения в канал с фиксированным интервалом:
ticker := time.NewTicker(1 * time.Second)
defer ticker.Stop() // ОБЯЗАТЕЛЬНО — иначе утечка горутины
for {
select {
case t := <-ticker.C:
fmt.Println("tick at", t)
case <-done:
return
}
}
В отличие от time.After (одноразовый таймер), Ticker повторяется. Если получатель не успевает читать — тики не накапливаются, а пропускаются.
Для одноразовой задержки:
timer := time.NewTimer(5 * time.Second)
<-timer.C // ждём 5 секунд
time.Tick(d) — удобный вариант без Stop(), но утекает. Используй только в main/long-lived горутинах.