0Pricing
Go Academy · Урок

Тикеры для интервалов

Повторяйте действия через заданные интервалы

«Тикеры для интервалов» — бесплатный урок Go Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.

Повторение с фиксированной частотой

Если Вам нужно просто выполнять действие каждые N секунд, подходящим инструментом будет Ticker. В отличие от цикла с задержкой, он срабатывает с постоянным интервалом и не сбивается из-за времени выполнения работы.

Создание Ticker

time.NewTicker(d) возвращает Ticker, в канал C которого каждые d поступает текущее время.

ticker := time.NewTicker(time.Second)
defer ticker.Stop()

Всегда останавливайте Ticker

Ticker поддерживает активность внутреннего таймера. Если никогда не вызвать Stop(), возникнет утечка ресурсов. Сразу после создания используйте defer ticker.Stop().

Перебор канала

Можно перебирать канал тикера с помощью цикла, чтобы реагировать на каждый сигнал.

for t := range ticker.C {
    fmt.Println("tick at", t)
}

Остановка с помощью оператора выбора

Объедините тикер с каналом завершения, чтобы цикл мог корректно выйти.

for {
    select {
    case <-ticker.C:
        doWork()
    case <-done:
        return
    }
}

Ticker и таймер

Главное различие:

  • Таймер срабатывает один раз после задержки
  • Ticker срабатывает повторно через заданный интервал

Используйте таймер для одноразовых ограничений времени, а Ticker — для периодической работы.

Удобство time.Tick

time.Tick(d) возвращает только канал. Это удобно, но остановить его нельзя, поэтому в программах с долгим временем работы он приводит к утечке ресурсов. В полноценных программах вместо него предпочитайте NewTicker.

for range time.Tick(time.Second) {
    // simple, but cannot Stop -> avoid in servers
}

Обработка медленной работы

Если работа занимает больше времени, чем заданный интервал, сигналы не ставятся в очередь: тикер отбрасывает их, а не создаёт всплеск запусков. Поэтому очередь невыполненных сигналов не накапливается, но при высокой нагрузке некоторые срабатывания могут пропускаться.

Изменение частоты

Чтобы изменить интервал, создайте новый тикер. Начиная с Go 1.15, также можно использовать ticker.Reset(d), чтобы изменить период без выделения нового объекта.

ticker.Reset(500 * time.Millisecond)

Отмена контекста

В реальных сервисах управляйте циклами тикеров с помощью context.Context, чтобы сигналы завершения корректно их останавливали.

case <-ctx.Done():
    return ctx.Err()

Готовый к запуску пример: Ticker с фиксированной частотой

Эта автономная программа трижды срабатывает через фиксированный интервал, а затем корректно останавливается с помощью счётчика.

package main

import (
    "fmt"
    "time"
)

func main() {
    ticker := time.NewTicker(10 * time.Millisecond)
    defer ticker.Stop()
    count := 0
    for range ticker.C {
        count++
        fmt.Println("tick", count)
        if count == 3 {
            break
        }
    }
    fmt.Println("done")
}

Проверка знаний

Проверьте, насколько хорошо Вы поняли работу тикеров.

Итоги

Вы изучили тикеры для работы с интервалами:

  • time.NewTicker(d) срабатывает каждые d и отправляет сигналы в свой канал C
  • Всегда используйте defer ticker.Stop(), чтобы избежать утечек ресурсов
  • При медленной работе тикеры отбрасывают сигналы, а не создают всплеск запусков
  • Используйте Reset для изменения частоты, а контекст или канал завершения — для выхода

Часто задаваемые вопросы

Урок «Тикеры для интервалов» бесплатный?

Да — полный текст урока «Тикеры для интервалов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.

Чему я научусь в уроке «Тикеры для интервалов»?

Повторяйте действия через заданные интервалы Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Go Academy?

Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Тикеры для интервалов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Go Academy?

Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Планирование по времени
  2. Библиотека robfig/cron
  3. Тикеры для интервалов
  4. Корректное завершение задач
← Назад к Go Academy