In meinem Projekt habe ich einen Byte-Slice aus der Antwort einer Anfrage.
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
}
Dies funktioniert, aber io.Reader
wie konvertiere ich, wenn ich den Text der Antwort erhalten möchte? Ich habe den Newreader / Writer ausprobiert, war aber nicht erfolgreich.
io.Reader
? In diesem Fall ist resp.Body bereits von diesem Typ.[]byte
zu einemio.Reader
(und io.ReadSeeker)*bytes.Reader
die dieio.Reader
Schnittstelle implementiert .Antworten:
Um einen Typ zu erhalten, der
io.Reader
aus einem[]byte
Slice implementiert wird , können Siebytes.NewReader
imbytes
Paket Folgendes verwenden:Dies gibt einen Wert vom Typ zurück,
bytes.Reader
der dieio.Reader
(undio.ReadSeeker
) Schnittstelle implementiert.Mach dir keine Sorgen, dass sie nicht der gleiche "Typ" sind.
io.Reader
ist eine Schnittstelle und kann von vielen verschiedenen Typen implementiert werden. Weitere Informationen zu Schnittstellen in Go finden Sie unter Effective Go: Schnittstellen und Typen .quelle
[]byte
eine zu machenio.Writer
? ZBbytes.NewWriter(destination)
bytes.Buffer
. Dort erstellen Sie einen Puffer, derio.Writer
wie folgt implementiert :w := bytes.NewBuffer(destination)
.govet
:cannot use *bytes.NewReader(out.Bytes()) (type bytes.Reader) as type io.Reader in argument to ioutil.NopCloser
:(bytes.Reader
sind und Sie sie von einem Zeigertyp (*bytes.Reader
) in einen Basistyp (bytes.Reader
) umwandeln .*
Dies funktioniert auch , um wiederum
[]byte
inio.Reader
quelle