Функция time.NewTicker
Функция time.NewTicker создает новый тикер и возвращает указатель на time.Ticker.
В качестве единственного параметра она принимает интервал типа time.Duration.
Тикер содержит канал C, в который с заданной периодичностью отправляется текущее время.
Тикер полезен для выполнения повторяющихся действий с фиксированным интервалом.
Синтаксис
time.NewTicker(d)
Базовый пример
Давайте создадим тикер с интервалом 500 миллисекунд и выведем время в канал три раза:
package main
import (
"fmt"
"time"
)
func main() {
ticker := time.NewTicker(500 * time.Millisecond)
defer ticker.Stop()
for i := 0; i < 3; i++ {
t := <-ticker.C
fmt.Println(t)
}
}
Результат выполнения кода (примерный вывод):
"2026-09-04 12:00:00.500 +0300 MSK m=+0.500..."
"2026-09-04 12:00:01.000 +0300 MSK m=+1.000..."
"2026-09-04 12:00:01.500 +0300 MSK m=+1.500..."
Пример с остановкой тикера
Тикер можно остановить методом Stop, чтобы
прекратить отправку значений в канал. Это важно для
предотвращения утечек горутин:
package main
import (
"fmt"
"time"
)
func main() {
ticker := time.NewTicker(300 * time.Millisecond)
go func() {
for t := range ticker.C {
fmt.Println(t)
}
}()
time.Sleep(1 * time.Second)
ticker.Stop()
fmt.Println("Ticker stopped")
}
Результат выполнения кода:
"2026-09-04 12:00:00.300 +0300 MSK m=+0.300..."
"2026-09-04 12:00:00.600 +0300 MSK m=+0.600..."
"2026-09-04 12:00:00.900 +0300 MSK m=+0.900..."
"Ticker stopped"
Пример использования в реальной задаче
Давайте смоделируем выполнение фоновой задачи каждую секунду с возможностью остановки:
package main
import (
"fmt"
"time"
)
func main() {
ticker := time.NewTicker(1 * time.Second)
done := make(chan bool)
go func() {
for {
select {
case <-done:
return
case t := <-ticker.C:
fmt.Printf("Task executed at %s\n", t)
}
}
}()
time.Sleep(3 * time.Second)
done <- true
ticker.Stop()
fmt.Println("Main done")
}
Результат выполнения кода:
"Task executed at 2026-09-04 12:00:01 +0300 MSK"
"Task executed at 2026-09-04 12:00:02 +0300 MSK"
"Task executed at 2026-09-04 12:00:03 +0300 MSK"
"Main done"
Смотрите также
-
функцию
time.NewTimer,
которая создает таймер для однократного события -
метод
time.Ticker.Stop,
который останавливает тикер -
метод
time.Ticker.Reset,
который изменяет интервал тикера -
функцию
time.Tick,
которая возвращает канал для простых случаев