将字节切片转换为io.Reader

时间:2015-04-20 11:05:35

标签: go

在我的项目中,我有一个来自请求响应的字节切片。

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.Reader的回复主体,我该如何转换?我尝试了新的读者/作者,但没有成功。

2 个答案:

答案 0 :(得分:192)

要从io.Reader切片获取实现[]byte的类型,您可以在bytes.NewReader包中使用bytes

r := bytes.NewReader(byteData)

这将返回bytes.Reader类型的值,该值实现io.Reader(和io.ReadSeeker)接口。

不要担心他们不一样"键入"。 io.Reader是一个接口,可以通过许多不同的类型实现。要了解有关Go中接口的更多信息,请阅读Effective Go: Interfaces and Types

答案 1 :(得分:-8)

r := strings(byteData)

这也可以将[]byte变为io.Reader