io.TeeReader(r, w) возвращает io.Reader, который при чтении ведет себя как r, но каждый прочитанный фрагмент дополнительно записывается в w.
var buf bytes.Buffer
r := io.TeeReader(httpResp.Body, &buf)
body, _ := io.ReadAll(r)
// body и buf.Bytes() содержат одни и те же данныеТипичные сценарии: логирование тела запроса/ответа при отладке, сохранение копии потока для повторного парсинга.