Назад к вопросам
СБЕР
Middle
3
Что такое контекст в Go? Для чего используется? Как работает отмена по таймауту?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
В Go context — это пакет и концепция для управления временем жизни операций, передачи сигналов отмены и дедлайнов между горутинами.
Основные задачи контекста:
- отмена операций (например, при таймауте или отмене пользователем),
- передача значений (например, ID запроса) по цепочке вызовов,
- установка дедлайнов (таймаутов).
Отмена по таймауту работает так:
- Создаётся контекст с дедлайном или таймаутом, например,
context.WithTimeout. - По истечении времени автоматически вызывается отмена контекста.
- Горутине, которая слушает этот контекст, приходит сигнал отмены через канал
Done(). - Горутинa должна корректно обработать отмену (например, прервать работу и освободить ресурсы).
Пример:
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
select {
case <-time.After(3 * time.Second):
fmt.Println("operation completed")
case <-ctx.Done():
fmt.Println("operation cancelled or timed out")
}
Здесь операция прервётся через 2 секунды, если не завершится раньше.