web-dev-qa-db-fra.com

Convertit la tranche d'octets en io.Reader

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.

124
Chan Willson

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 .

222
ANisus