Это утверждение времени компиляции, которое тип *Doubler
удовлетворяет интерфейсу PropertyLoadSaver
.
Если тип *Doubler
не удовлетворяет интерфейсу, то компиляция завершится с ошибкой, аналогичной:
prog.go:21: cannot use (*Doubler)(nil) (type *Doubler) as type PropertyLoadSaver in assignment:
*Doubler does not implement PropertyLoadSaver (missing Save method)
. Вот как это работает. Код var _ PropertyLoadSaver
объявляет неназванную переменную типа PropertyLoadSaver
. Выражение (*Doubler)(nil)
оценивается значением типа *Doubler
. *Doubler
может быть назначена только переменной типа ProperytLoadSaver
, если *Doubler
реализует интерфейс PropertyLoadSaver
.
Используется пустой идентификатор _
, потому что переменная не должна быть упоминается в другом месте в пакете. Тот же результат может быть достигнут с помощью непустого идентификатора:
var assertStarDoublerIsPropertyLoadSaver PropertyLoadSaver = (*Doubler)(nil)
Есть ли модуль-оболочка поверх http, чтобы более легко обрабатывать HTTP-ответы от приложения-узла?
Если у вас есть сервер https
, измените свой url на использование протокола https://
.
У меня возникла аналогичная проблема с этим. У моего url есть протокол http://
, и я хочу сделать запрос POST
, но сервер хочет перенаправить его на https
. Случилось так, что, оказывается, поведение http-узла отправляет запрос переадресации (следующий) в GET
, что не так.
Что я сделал, это изменить мой url на https://
протокол и он работает.
Сделайте другой запрос на основе response.headers.location
:
const request = function(url) {
lib.get(url, (response) => {
var body = [];
if (response.statusCode == 302) {
body = [];
request(response.headers.location);
} else {
response.on("data", /*...*/);
response.on("end", /*...*/);
};
} ).on("error", /*...*/);
};
request(url);
Если все, что вы хотите сделать, это перенаправление, но все же хотите использовать встроенные модули HTTP и HTTPS, я предлагаю вам использовать https://github.com/olalonde/follow-redirects ,
Все, что вам нужно сделать, это заменить:
var http = require('http');
на
var http = require('follow-redirects').http;
... и все ваши запросы автоматически последуют за перенаправлениями.
Раскрытие: я написал этот модуль.
Обновление:
Теперь вы можете выполнить все переадресации с помощью var request = require('request');
с помощью параметра followAllRedirects
.
request({
followAllRedirects: true,
url: url
}, function (error, response, body) {
if (!error) {
console.log(response);
}
});
http
, но затем вы используете функцию с именем request
– jcollum
22 June 2015 в 21:46
http.request
, API довольно прост. – Raynos 23 October 2012 в 21:24http
не следует переадресации, поэтому он не является частью встроенного модуляhttp
. – gilad mayani 10 November 2016 в 17:44