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

Тип time.Ticker

Тип Ticker представляет собой таймер, который генерирует события через регулярные промежутки времени. Он используется для выполнения действий с фиксированной периодичностью. Основное поле Ticker — это канал C, в который отправляется текущее время каждый раз, когда срабатывает тик. Для создания тикера используется функция NewTicker, которая принимает интервал между тиками в виде значения типа time.Duration.

Синтаксис

ticker := time.NewTicker(duration)

Где duration — интервал времени между тиками.

Создание и использование Ticker

package main import ( "fmt" "time" ) func main() { ticker := time.NewTicker(2 * time.Second) defer ticker.Stop() for i := 0; i < 3; i++ { t := <-ticker.C fmt.Println("Tick at:", t) } }

Результат выполнения кода:

"Tick at: 2026-09-04 12:00:00 +0000 UTC" "Tick at: 2026-09-04 12:00:02 +0000 UTC" "Tick at: 2026-09-04 12:00:04 +0000 UTC"

В этом примере тикер отправляет значение в канал каждые 2 секунды. Цикл получает три тика и выводит время каждого из них.

Остановка Ticker с помощью Stop

package main import ( "fmt" "time" ) func main() { ticker := time.NewTicker(1 * time.Second) go func() { time.Sleep(3 * time.Second) ticker.Stop() fmt.Println("Ticker stopped") }() for t := range ticker.C { fmt.Println("Tick at:", t) } }

Результат выполнения кода:

"Tick at: 2026-09-04 12:00:01 +0000 UTC" "Tick at: 2026-09-04 12:00:02 +0000 UTC" "Tick at: 2026-09-04 12:00:03 +0000 UTC" "Ticker stopped"

Метод Stop останавливает тикер, после чего канал C больше не получает значений. Это позволяет корректно завершить работу с тикером и избежать утечек ресурсов.

Сброс интервала с помощью Reset

package main import ( "fmt" "time" ) func main() { ticker := time.NewTicker(2 * time.Second) defer ticker.Stop() time.Sleep(1 * time.Second) ticker.Reset(500 * time.Millisecond) for i := 0; i < 3; i++ { t := <-ticker.C fmt.Println("Tick at:", t) } }

Результат выполнения кода:

"Tick at: 2026-09-04 12:00:01.500 +0000 UTC" "Tick at: 2026-09-04 12:00:02.000 +0000 UTC" "Tick at: 2026-09-04 12:00:02.500 +0000 UTC"

Метод Reset изменяет интервал между тиками. В примере после создания тикера с интервалом 2 секунды, через 1 секунду интервал сбрасывается на 500 миллисекунд, и последующие тики происходят с новым интервалом.

Использование Ticker в фоновых задачах

package main import ( "fmt" "time" ) func main() { ticker := time.NewTicker(3 * time.Second) defer ticker.Stop() done := make(chan bool) go func() { for { select { case t := <-ticker.C: fmt.Println("Background task at:", t) case <-done: fmt.Println("Stopping background task") return } } }() time.Sleep(10 * time.Second) done <- true time.Sleep(1 * time.Second) }

Результат выполнения кода:

"Background task at: 2026-09-04 12:00:03 +0000 UTC" "Background task at: 2026-09-04 12:00:06 +0000 UTC" "Background task at: 2026-09-04 12:00:09 +0000 UTC" "Stopping background task"

В этом примере тикер используется в фоновой горутине для выполнения задач с фиксированной периодичностью. Управление остановкой происходит через канал done.

Смотрите также

  • тип time.Timer,
    который представляет однократный таймер
  • функцию time.NewTicker,
    которая создает новый тикер
  • функцию time.Tick,
    которая возвращает канал для простых случаев
  • тип time.Duration,
    который используется для задания интервалов времени
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить