Middle
Маъзӣ дар Go чист? Барои чӣ истифода мешавад? Чӣ гуна кор мекунад бекор кардани вақти тамдид?
sobes.tech AI
Ҷавоб аз 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 секунды, если не завершится раньше.