Преобразование массива байтов в io.read в golang
В моем проекте у меня есть массив байтов из ответа на запрос.
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
log.Println("StatusCode为" + strconv.Itoa(resp.StatusCode))
return
}
respByte, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Println("fail to read response data")
return
}
Это работает, но если я хочу получить тело ответа для io.read
, как мне преобразовать? Я попробовал newreader/writer, но не был успешным.
Ответы
Ответ 1
Чтобы получить тип, реализующий io.Reader
из фрагмента []byte
, вы можете использовать bytes.NewReader
в bytes
:
r := bytes.NewReader(byteData)
Это вернет значение типа bytes.Reader
, которое реализует io.Reader
(и io.ReadSeeker
).
Не беспокойтесь о том, что они не являются одним и тем же "типом". io.Reader
- это интерфейс и может быть реализован различными типами. Чтобы узнать немного о интерфейсах в Go, прочитайте Эффективный переход: интерфейсы и типы.
Ответ 2
r: = строки (byteData)
Это также работает, чтобы повернуть [] байт в io.reader