РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
735 of 1593 menu

Функция 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,
    которая возвращает канал для простых случаев
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить