Выбор ответа Middle net/http и middleware спрашивают часто обновлено

Зачем закрывать resp.Body

Вопрос

Что будет, если в HTTP-клиенте забывать resp.Body.Close()?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Соединения не вернутся в пул: утекут сокеты и горутины. Транспорт может переиспользовать соединение только после того, как тело прочитано до конца и закрыто.

Варианты ответа

  1. Ничего, тело закроет финализатор при сборке мусора
  2. Соединения не вернутся в пул: утекут сокеты и горутиныправильный ответ
  3. Следующий запрос к тому же хосту упадёт с panic
  4. Ответ не будет прочитан: Body пустой до вызова Close

Разбор

Транспорт может переиспользовать соединение только после того, как тело прочитано до конца и закрыто. Без Close каждое соединение висит, транспорт открывает новые, растут число сокетов и горутин чтения и записи, со временем too many open files. Финализатор на это не рассчитан, паники нет, а тело читается и без Close.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме