Senior
40
Go тілінде context деген не? context.WithTimeout пен context.WithDeadline қалай ерекшеленеді?
Сұралған компаниялар
Lenta Tech
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")
}