Я относительно новичок в Golang и не совсем понимаю потоки. У меня есть функция (функция автоматического выключателя), которая выполняет вызовы Rest. У меня он работает, но он только передает обратно "responseBody". На самом деле я хотел бы вернуть весь запрос потока назад как для тела, так и для заголовка вместе.
Когда я пытаюсь использовать аналогичный подход к «заголовку», я получаю сообщение об ошибке, что заголовок не является потоковым.
Есть ли хороший/лучший способ сделать это? Спасибо. Ниже моя функция.
func CallWithRetries(req *http.Request, output chan []byte) error {
r := retrier.New(retrier.ConstantBackoff(RETRIES, 100 * time.Millisecond), nil)
attempt := 0
err := r.Run(func() error {
attempt++
resp, err := Client.Do(req)
if err == nil && resp.StatusCode < 299 {
responseBody, err := ioutil.ReadAll(resp.Body)
if err == nil {
output <- responseBody
return err
}
return err
} else if err == nil {
customLogger.LogDebug("Status code was: " , transactionId)
err = fmt.Errorf("Status was %v", resp.StatusCode)
}
return err
})
return err
}
[]byte
, а заголовки HTTP имеют тип[][]string
. Найдите способ сериализовать заголовки в[]byte
. - person icza   schedule 27.08.2018output
— этоchan []byte
в вашем примере, а заголовки ответа не хранятся в[]byte
, поэтому вы не можете отправить его через свой канал. Просто преобразуйте их в формат[]byte
(например, упорядочив их в объект JSON), и вы сможете их отправлять. - person Ullaakut   schedule 27.08.2018io.Reader
/io.Writer
. Использование каналов — это просто стандартный параллелизм Go. - person Adrian   schedule 27.08.2018