在我的项目中,我有一个来自请求响应的[byte slice。
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,我该如何转换?我尝试了 newreader/writer 但没有成功。
io.Reader
要获取io.Reader从[]byte切片实现的类型,您可以bytes.NewReader在bytes包中使用:
[]byte
bytes.NewReader
bytes
r := bytes.NewReader(byteData)
这将返回一个bytes.Reader实现io.Reader(和io.ReadSeeker)接口的类型值。
bytes.Reader
io.ReadSeeker
不要担心它们不是同一个“类型”。io.Reader是一个接口,可以由许多不同的类型实现。要了解有关 Go 中接口的更多信息,请阅读Effective Go:接口和类型。