Sobes.tech
Назад к вопросам
Senior
3

Что такое context в Go и как он используется?

Компании, где спрашивали
ООО Макс

Ответ от нейросети

sobes.tech AI

В Go пакет context используется для передачи сигналов отмены, дедлайнов и других значений между горутинами, особенно в распределённых и многопоточных приложениях.

Основные возможности context:

  • Отмена операций (cancelation) — позволяет прервать выполнение горутины.
  • Таймауты и дедлайны — ограничивают время выполнения.
  • Передача значений — позволяет передавать данные, связанные с запросом.

Типичный сценарий использования — передача context в функции, которые выполняют длительные операции, чтобы можно было контролировать их завершение.

Пример:

func doWork(ctx context.Context) {
    select {
    case <-time.After(5 * time.Second):
        fmt.Println("Work done")
    case <-ctx.Done():
        fmt.Println("Work cancelled")
    }
}

func main() {
    ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
    defer cancel()

    doWork(ctx)
}

Здесь работа прервётся через 2 секунды, даже если 5 секунд ещё не прошло.