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() // отмена или тайм-аут
}
}
Такой подход улучшает контроль над выполнением и упрощает отмену операций в сложных системах.