resp.Body в Go — это потоковый ресурс, связанный с сетевым подключением. Если его не закрыть, клиент не сможет корректно вернуть соединение в пул или освободить ресурсы системы, что приводит к деградации сервиса.
Почему это критично:
-
Утечка ресурсов: незамкнутые тела содержат ручки и разъемы.
-
Ухудшение повторного использования соединений: поддержка активности работает хуже, количество
новых связей увеличивается.
-
Увеличение задержек и ошибок под нагрузкой: возможное исчерпание ресурсов
пул соединений и системные ограничения.
-
Нестабильное поведение клиента: «зависания», тайм-ауты, неожиданные сбои в работе
высокочастотные звонки.
Правильный узор:
-
После проверки ошибки с Do сразу делаем: defer resp.Body.Close().
-
Если вам нужно максимальное количество повторных соединений:
Практический вывод:
Замыкание resp.Body — это не формальность, а необходимое условие корректной работы HTTP-клиента в Go. Это напрямую влияет на производительность, стабильность и ресурсоэффективность сервиса.
Пример:
Итог
resp.Body в Go — это потоковый ресурс, связанный с сетевым подключением.