简体   繁体   English

将字节切片转换为 io.Reader

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM