Dans mon projet, j'ai une tranche d'octet à partir d'une réponse à une demande.
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
}
Cela fonctionne, mais si je veux obtenir le corps de la réponse pour io.Reader
, comment puis-je convertir? J'ai essayé le nouveau lecteur/écrivain mais je n'ai pas réussi.
Pour obtenir un type qui implémente _io.Reader
_ à partir d'une tranche _[]byte
_, vous pouvez utiliser bytes.NewReader
dans le package bytes
:
_r := bytes.NewReader(byteData)
_
Cela retournera une valeur de type bytes.Reader
qui implémente l'interface io.Reader
(et io.ReadSeeker
) .
Ne vous inquiétez pas du fait qu'ils ne soient pas du même "type". _io.Reader
_ est une interface et peut être implémenté par différents types. Pour en apprendre un peu plus sur les interfaces dans Go, lisez Effective Go: Interfaces and Types .