TL; DR: они одного типа, используются по-разному для двух вариантов использования и инициализируются по-разному для обслуживания этих вариантов использования
Разница только в использовании - они одного типа http.Request
. http.NewRequest
используется для более «производственного» варианта использования, который является клиентом - «создать новый запрос для отправки на сервер». При написании HTTP-серверов иногда полезно создавать запросы на тестирование, что и делает httptest.NewRequest
. Документ http.NewRequest
полезен здесь:
NewRequest возвращает запрос, подходящий для использования с Client.Do или
Transport.RoundTrip. Создать запрос на использование с тестированием Сервера
Обработчик, либо используйте функцию NewRequest в net / http / httptest
пакет, используйте ReadRequest или вручную обновите поля запроса. Увидеть
Документация типа запроса на разницу между входящими
и исходящие поля запроса.
Если вы посмотрите документы типа http.Request , вы найдете такие вещи, как:
// URL specifies either the URI being requested (for server
// requests) or the URL to access (for client requests).
//
// For server requests, the URL is parsed from the URI
// supplied on the Request-Line as stored in RequestURI. For
// most requests, fields other than Path and RawQuery will be
// empty. (See RFC 7230, Section 5.3)
//
// For client requests, the URL's Host specifies the server to
// connect to, while the Request's Host field optionally
// specifies the Host header value to send in the HTTP
// request.
URL *url.URL
Обратите внимание на «Для клиентских запросов» и «Для серверных запросов».
Если вы видите место, которое не использует httptest.NewRequest
, это может быть из-за:
- Они не знают об этом
- Или им нужна более тщательная настройка, чем
http.NewRequest
не обеспечивает