[英]Convert byte slice to io.Reader
In my project, I have a byte slice from a request's response.在我的项目中,我有一个来自请求响应的字节切片。
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
}
This works, but if I want to get the response's body for io.Reader
, how do I convert?这有效,但如果我想获得
io.Reader
的响应正文,我该如何转换? I tried the newreader/writer but wasn't successful.我尝试了 newreader/writer 但没有成功。
To get a type that implements io.Reader
from a []byte
slice, you can use bytes.NewReader
in the bytes
package:要从
[]byte
切片获取实现io.Reader
的类型,您可以使用bytes
包中的bytes.NewReader
:
r := bytes.NewReader(byteData)
This will return a value of type bytes.Reader
which implements the io.Reader
(and io.ReadSeeker
) interface.这将返回一个
bytes.Reader
类型的值,它实现了io.Reader
(和io.ReadSeeker
)接口。
Don't worry about them not being the same "type".不要担心它们不是同一个“类型”。
io.Reader
is an interface and can be implemented by many different types. io.Reader
是一个接口,可以通过多种不同的类型实现。 To learn a little bit more about interfaces in Go, read Effective Go: Interfaces and Types .要详细了解 Go 中的接口,请阅读Effective Go:接口和类型。
r := strings(byteData)
这也适用于将[]byte
转换为io.Reader
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.