Sobes.tech
Back to questions
Senior
2

Что такое context в Go? Чем отличается context.WithTimeout от context.WithDeadline?

Companies where asked
Lenta Tech

Answer from AI

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")
}