Проверяет умение использовать контексты и их влияние на длинные операции.
Горутины нужно завершать через context.Context, а не через каналы или флаги.
Контекст передаётся в функции, и каждая длинная операция должна регулярно проверять <-ctx.Done().
Контекст — стандартный механизм контроля времени жизни операций.
Правильный способ остановить горутину:
Передать ей ctx.
Внутри регулярно проверять ctx.Done().
Прерывать выполнение, если контекст отменён.
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
return
default:
// Долгая работа
}
}
}Почему нельзя использовать manual boolean:
нет синхронизации, гонки,
не передаётся в сетевые вызовы или SQL,
не работает в связке с таймаутами.
Запросы БД (Postgres, Mongo, Redis) автоматически отменяются, если их метод получил контекст с отменой.
Вывод:
Любая долгоживущая горутина должна уметь корректно завершаться по контексту.
Уровень
Рейтинг:
5
Сложность:
6
Навыки
Golang
Postgres
Ключевые слова
Подпишись на Golang Developer в телеграм