Back to questions
Senior
6
Можете привести примеры использования WithCancel, WithTimeout и WithDeadline?
Companies where asked
Алабуга
Answer from AI
sobes.tech AI
В Go пакете context есть функции для создания контекстов с возможностью отмены и ограничения времени выполнения:
-
WithCancel — создаёт контекст, который можно отменить вручную, вызывая функцию cancel(). Используется, когда нужно прервать операцию по событию.
-
WithTimeout — создаёт контекст, который автоматически отменяется через заданный промежуток времени.
-
WithDeadline — создаёт контекст, который отменяется в определённый момент времени.
Примеры:
ctx, cancel := context.WithCancel(context.Background())
// Запускаем горутину, которая отменит контекст через 2 секунды
go func() {
time.Sleep(2 * time.Second)
cancel()
}()
select {
case <-ctx.Done():
fmt.Println("Операция отменена")
}
// WithTimeout
ctxTimeout, cancelTimeout := context.WithTimeout(context.Background(), 3*time.Second)
defer cancelTimeout()
// операция, которая прервётся через 3 секунды
// WithDeadline
deadline := time.Now().Add(5 * time.Second)
ctxDeadline, cancelDeadline := context.WithDeadline(context.Background(), deadline)
defer cancelDeadline()
// операция, которая прервётся в заданное время
Эти механизмы полезны для контроля времени выполнения запросов, отмены долгих операций и управления ресурсами.