Sobes.tech
Middle

Маъзӣ дар Go чист? Барои чӣ истифода мешавад? Чӣ гуна кор мекунад бекор кардани вақти тамдид?

sobes.tech AI

Ҷавоб аз AI

Дар Go, context — это пакет и концепция для управления временем жизни операций, передачи сигналов отмены и установки временных ограничений между горутинами.

Основные задачи контекста:

  • Отмена операций (например, при таймауте или отмене пользователем),
  • Передача значений (например, ID запроса) по цепочке вызовов,
  • Установка дедлайнов (таймаутов).

Отмена по таймауту работает так:

  1. Создаётся контекст с дедлайном или таймаутом, например, context.WithTimeout.
  2. По истечении времени автоматически вызывается отмена контекста.
  3. Горутине, которая слушает этот контекст, приходит сигнал отмены через канал Done().
  4. Горутин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 секунды, если не завершится раньше.