Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: goroutine, time.Ticker, time.Sleep, concurrency

Как реализовать периодическое выполнение задачи с заданным интервалом в Go?

Вопрос проверяет знание горутин и таймеров в Go для реализации периодических задач.

Короткий ответ

Для периодического выполнения задачи в Go используется time.Ticker. Он создаёт канал, который отправляет значение через заданные интервалы. Внутри горутины можно читать из этого канала и выполнять нужную работу. Также можно использовать time.Sleep в бесконечном цикле, но Ticker точнее и эффективнее.

Длинный ответ

Основная концепция

В Go для выполнения задачи с заданным интервалом чаще всего применяют time.Ticker. Это структура, которая содержит канал, куда через равные промежутки времени отправляется текущее время. Запуская горутину с циклом, читающим из этого канала, можно выполнять любую работу периодически.

Пример с time.Ticker

package main

import (
	"fmt"
	"time"
)

func main() {
	ticker := time.NewTicker(2 * time.Second)
	defer ticker.Stop()

	done := make(chan bool)

	go func() {
		for {
			select {
			case <-ticker.C:
				fmt.Println("Выполнение задачи в", time.Now())
			case <-done:
				return
			}
		}
	}()

	time.Sleep(10 * time.Second)
	done <- true
	fmt.Println("Остановка")
}

В этом примере создаётся тикер с интервалом 2 секунды. Горутина в цикле ожидает сигнал от тикера или канал завершения. Когда приходит сигнал от тикера, выполняется задача. Через 10 секунд отправляется сигнал в канал done, и горутина завершается.

Альтернативный подход: time.Sleep

Можно использовать бесконечный цикл с time.Sleep, но это менее точно, так как время выполнения самой задачи не учитывается. Ticker же гарантирует интервал между отправками сигналов, независимо от времени обработки.

Применение

Периодические задачи используются для опроса внешних сервисов, сбора метрик, очистки кэша, отправки heartbeat-сигналов и т.д. Ticker удобен, когда нужно выполнять работу строго по расписанию, не накапливая задержки.

Вывод

Используйте time.Ticker для точного периодического выполнения задач в Go. Он прост в использовании, эффективен и позволяет легко управлять остановкой через каналы.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    4

Навыки

  • Golang

    Golang

Ключевые слова

#goroutine

#time.Ticker

#time.Sleep

#concurrency

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.