> Зачем добавлять контекст в запросы к базе данных? (Go)

Уровень: middle · Роль: backend · Язык: Go · Категория: Технические вопросы

Компании: InDrive

Стек: Go

> Пример ответа

Добавление контекста (context.Context) в запросы к базе данных в Go необходимо для управления временем жизни операции и передачи метаданных. Основные причины:

  1. Тайм-ауты и дедлайны: Контекст позволяет задать максимальное время выполнения запроса. Например, при обработке HTTP-запроса можно привязать контекст к времени ожидания клиента. Если клиент отключился или истек тайм-аут, запрос в БД отменяется, предотвращая зависание горутин и утечку ресурсов.

  2. Отмена операций: Через context.WithCancel можно принудительно прервать долгий запрос, например, при завершении сервера или приоритетном запросе.

  3. Передача значений: Контекст используется для проброса сквозных данных (ID запроса, токен аутентификации), которые могут быть полезны для логирования или трассировки в драйвере БД.

Пример в Go:

GO
func GetUser(ctx context.Context, db *sql.DB, id int) (*User, error) {
ctx, cancel := context.WithTimeout(ctx, 2*time.Second)
defer cancel()
row := db.QueryRowContext(ctx, "SELECT * FROM users WHERE id = $1", id)
// ...
}

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

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью