Sobes.tech
Back to questions
Senior
3

Когда стоит прокидывать контекст в БД в ExecContext, а когда не стоит?

Companies where asked
Лига Цифровой ЭкономикиЛига Цифровой Экономики

Answer from AI

sobes.tech AI

В Go метод ExecContext используется для выполнения SQL-запросов с поддержкой контекста (context.Context). Контекст позволяет управлять временем выполнения запроса, отменой операции и передачей метаданных.

Стоит прокидывать контекст в ExecContext, когда:

  • Нужно контролировать таймауты или дедлайны выполнения запроса.
  • Требуется возможность отмены операции (например, при отмене HTTP-запроса).
  • Необходимо передавать метаданные (например, трассировку или аутентификацию) через контекст.

Не стоит использовать ExecContext, если:

  • Запрос очень простой и не требует контроля времени выполнения.
  • Контекст не используется в вызывающем коде, и нет необходимости в отмене или таймаутах.

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

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

_, err := db.ExecContext(ctx, "UPDATE users SET active = ? WHERE id = ?", true, userID)
if err != nil {
    // обработка ошибки
}

Таким образом, прокидывание контекста полезно для управления жизненным циклом запроса и улучшения контроля над выполнением операций с БД.