Konvertieren von byte-slice io.Reader
In meinem Projekt habe ich ein byte-slice von einer Anfrage die Antwort.
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
}
Das funktioniert, aber wenn ich will, um die Reaktion des Körpers für io.Reader
, wie kann ich konvertieren? Ich habe versucht, die newreader/Schriftsteller, aber war nicht erfolgreich.
- Wenn ich das richtig verstehe du willst die Antwort als
io.Reader
? In diesem Fall resp.Körper ist bereits von diesem Typ. - golang.org/pkg/bytes/#NewReader wird "turn" eine
[]byte
zu einemio.Reader
(und io.ReadSeeker) - yap~Körper...ich will die Antwort, die wie io.reader .aber in der base-Klasse, wenn ich zum Schluss die Anfrage,die Antwort, die getötet wurden.. speichern Sie einfach eine Antwort-body als []byte struct.
- ich werde es versuchen....thx dude..by die Art und Weise...es ist Blick ist wie der andere Typ..
- Diese Anforderung macht mehr Sinn, der Körper kann nicht gelesen werden nach dem schließen. Wie vorgeschlagen, verwenden
*bytes.Reader
die Implementierung desio.Reader
- Schnittstelle. - thank u @Arjan, ich werde es versuchen....
- Es ist eine andere Art. Die eine ist eine Schnittstelle, die anderen einen Wert, die diese Schnittstelle implementiert. Ich habe eine Antwort von meinem Kommentar versucht zu erklären, es ein bisschen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bekommen, eine Art, die
io.Reader
aus einer[]byte
Scheibe, die Sie verwenden können,Byte.NewReader
in derByte
Paket:Diese gibt einen Wert vom Typ
Byte.Reader
, die sich um dieio.Reader
(undio.ReadSeeker
) Schnittstelle.Mach dir keine sorgen über Sie nicht der gleiche "Typ".
io.Reader
ist eine Schnittstelle und kann umgesetzt werden, indem viele verschiedene Arten. Zu lernen, ein bisschen mehr über die Schnittstellen Gehen, Lesen Effektiv Gehen: Schnittstellen und Typen.[]byte
in eineio.Writer
? E. g.bytes.NewWriter(destination)
bytes.Buffer
. Dort erzeugen Sie einen Puffer implementiert, dassio.Writer
wie diese: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
hat Zeiger, die Empfänger, und Sie sind drehen Sie sich von einem Zeiger-Typ (*bytes.Reader
) eine Basistyp (bytes.Reader
) . Einfach loszuwerden, die Sternchen (*
), und Sie sollten in Ordnung sein 🙂Funktioniert das auch wiederum
[]byte
inio.Reader