Назад к вопросам
Senior
3
Что такое context в Go? Чем отличается context.WithTimeout от context.WithDeadline?
Компании, где спрашивали
Lenta Tech
Ответ от нейросети
sobes.tech AI
В Go пакет context используется для передачи сигналов отмены, дедлайнов и других значений между горутинами, что помогает управлять временем жизни операций и их отменой.
-
context.WithTimeout(parent, timeout)создаёт новый контекст, который автоматически отменяется через заданный промежуток времениtimeoutот текущего момента. -
context.WithDeadline(parent, deadline)создаёт новый контекст, который отменяется в конкретное времяdeadline.
Основное отличие: WithTimeout задаёт время ожидания относительно текущего момента, а WithDeadline — абсолютное время. Внутренне WithTimeout реализован через WithDeadline, вычисляя deadline как time.Now() + timeout.
Пример:
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
select {
case <-time.After(10 * time.Second):
fmt.Println("operation completed")
case <-ctx.Done():
fmt.Println("timeout reached")
}