Можно ли передавать аргументы в context

«Можно ли передавать аргументы в context» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, можно. В context.Context можно передавать значения с помощью context.WithValue(). Это полезно для передачи данных, специфичных для запроса (например, ID пользователя, токены и т.д.). Однако не рекомендуется использовать контекст для передачи обязательных параметров функций — это антипаттерн.

Пример:

ctx := context.Background()
ctx = context.WithValue(ctx, "userID", 123)

// Получение значения
if userID, ok := ctx.Value("userID").(int); ok {
    fmt.Println("UserID:", userID)
}

Важно:

  • Используйте уникальные ключи (лучше свой тип, а не строки).
  • Контекст должен передавать только данные, связанные с запросом.
  • Избегайте частых обновлений контекста — он иммутабелен.