Junior — Middle
Кадом усулҳоро метавон барои пешгирии хатои 500 дар ҳолати тамдиди вақти интизории ҷавоб аз базаи додаҳо истифода бурд?
sobes.tech AI
Ҷавоб аз AI
За да избегнете грешка 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 {
// друга грешка
}
}
Този подход помага да се избегнат блокировки и да се контролира времето за изчакване на отговора от базата.