Тестирование HTTP: httptest.Server и ResponseRecorder
Пакет net/http/httptest закрывает обе стороны. httptest.NewRecorder проверяет обработчик напрямую: вы вызываете ServeHTTP с поддельным запросом и разбираете записанный ответ — без сети, без портов, мгновенно; это способ по умолчанию для тестов своих обработчиков. httptest.NewServer поднимает настоящий сервер на случайном свободном порту и отдаёт его адрес — нужен, когда проверяется клиент или когда важен реальный сетевой путь: заголовки, редиректы, таймауты. Правила простые: сервер обязательно закрывают через defer srv.Close(), порт не задают вручную (иначе тесты не пойдут параллельно), а адрес берут из srv.URL. Для проверки клиента к внешнему API поднимают такой сервер и подставляют его адрес в конфигурацию клиента — это честнее подмены транспорта, потому что проверяется и сериализация, и обработка кодов ответа. Для HTTPS есть NewTLSServer вместе с готовым srv.Client(), уже доверяющим его сертификату.