Для предотвращения ошибки 500 из-за истечения времени ожидания ответа от базы данных в Go можно использовать несколько подходов:
Какие методы можно использовать для предотвращения возникновения ошибки 500 в случае истечения времени ожидания ответа от базы данных?
Для предотвращения ошибки 500 из-за истечения времени ожидания ответа от базы данных в Go можно использовать несколько подходов:
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Для предотвращения ошибки 500 из-за истечения времени ожидания ответа от базы данных в Go можно использовать несколько подходов:
- Контекст с таймаутом — использовать
context.WithTimeoutдля ограничения времени выполнения запроса к базе. - Пул соединений — правильно настроить пул соединений, чтобы избежать блокировок и задержек.
- Обработка ошибок — корректно обрабатывать ошибки таймаута и возвращать понятные клиенту ответы.
Пример использования контекста с таймаутом:
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
err := db.QueryRowContext(ctx, "SELECT ...").Scan(&result)
if err != nil {
if errors.Is(err, context.DeadlineExceeded) {
// обработка таймаута
} else {
// другая ошибка
}
}
Такой подход помогает избежать зависаний и контролировать время ожидания ответа от базы.