Sobes.tech
Back to questions
Senior
4

Для чего нужен context в Go?

Companies where asked
Финтехробот

Answer from AI

sobes.tech AI

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

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

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

Пример использования:

ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
// Отмена по таймауту через 5 секунд

go func(ctx context.Context) {
    select {
    case <-time.After(time.Second * 10):
        fmt.Println("Операция завершена")
    case <-ctx.Done():
        fmt.Println("Операция отменена или таймаут")
    }
}(ctx)

// В конце обязательно вызываем cancel для освобождения ресурсов
cancel()

Таким образом, context помогает контролировать жизненный цикл операций и координировать работу горутин.