Sobes.tech
Back to questions
Middle+
4

Зачем прокидывать context первым аргументом в Go?

Companies where asked
Magnit Tech

Answer from AI

sobes.tech AI

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

Основные причины:

  • Отмена операций: позволяет отменить долгие или зависшие операции, например, при закрытии HTTP-запроса.
  • Тайм-ауты и дедлайны: можно задать ограничение по времени выполнения.
  • Передача данных: через context можно передавать информацию, например, идентификаторы запросов для логирования.

Стандартом является, что context.Context всегда первый параметр, чтобы было очевидно, что функция поддерживает управление контекстом.

Пример:

func ProcessRequest(ctx context.Context, data string) error {
    select {
    case <-time.After(5 * time.Second):
        // обработка
        return nil
    case <-ctx.Done():
        return ctx.Err() // отмена или тайм-аут
    }
}

Такой подход улучшает контроль над выполнением и упрощает отмену операций в сложных системах.