> Зачем добавлять контекст в запросы к базе данных? (Go)
Уровень: middle · Роль: backend · Язык: Go · Категория: Технические вопросы
Компании: InDrive
Стек: Go
> Пример ответа
Добавление контекста (context.Context) в запросы к базе данных в Go необходимо для управления временем жизни операции и передачи метаданных. Основные причины:
-
Тайм-ауты и дедлайны: Контекст позволяет задать максимальное время выполнения запроса. Например, при обработке HTTP-запроса можно привязать контекст к времени ожидания клиента. Если клиент отключился или истек тайм-аут, запрос в БД отменяется, предотвращая зависание горутин и утечку ресурсов.
-
Отмена операций: Через
context.WithCancelможно принудительно прервать долгий запрос, например, при завершении сервера или приоритетном запросе. -
Передача значений: Контекст используется для проброса сквозных данных (ID запроса, токен аутентификации), которые могут быть полезны для логирования или трассировки в драйвере БД.
Пример в Go:
GOfunc 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)// ...}
Без контекста запрос может выполняться бесконечно, блокируя пул соединений и снижая производительность.
> Похожие задачи по Go
Какие стратегии пагинации можно использовать вместо LIMIT OFFSET?
Что такое пагинация?
Как исправить SQL запрос, который собирает строку без контекста?
Можно ли сделать длину канала для задач равной 10?
> Похожие задачи по backend
Какие стратегии пагинации можно использовать вместо LIMIT OFFSET?
Что такое пагинация?
Как исправить SQL запрос, который собирает строку без контекста?
Можно ли сделать длину канала для задач равной 10?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью