Go context
Запрос к БД или внешнему сервису должен завершаться при отмене родительской работы.
Проверено Изменено
Плохо
// В HTTP-обработчике: срок запроса потерян.
ctx := context.Background()
err := db.QueryRowContext(ctx, query, orderID).Scan(&title)
if err != nil { return err }
Хорошо
ctx, cancel := context.WithTimeout(r.Context(), 2*time.Second)
defer cancel()
err := db.QueryRowContext(ctx, query, orderID).Scan(&title)
if err != nil { return err }
Почему это важно
Зависшие операции занимают соединения и ресурсы.
Когда применять
Фрагмент функции, возвращающей error: db — *sql.DB, r — *http.Request, query — параметризованный SELECT одной строки. Две секунды — пример, а не норматив. В Go передавайте context явно; фоновая задача должна иметь собственного владельца и срок жизни.
Кто что делает
Человек
Задаёт бюджет времени запроса и правила отмены работы.
AI-агент
Реализует правило в коде сервиса и проверяет ошибку, отмену и граничные входные данные.
Контроль результата:
- Отмените запрос и проверьте завершение зависимых операций.
Как проверить у себя
- Отмените запрос и проверьте завершение зависимых операций.
Первоисточники
История изменений на GitHub
Дата проверки отражает содержательную сверку. Синхронизация сайта не обновляет её автоматически.