Effiziente Konvertierung von io.Reader in String
Problem:
Betrachten Sie einen io.ReadCloser Objekt, das von einer http.Response erhalten wurde. Wie kann man den gesamten Stream effizient in einen String umwandeln?
Lösung:
Verwenden von Strings.Builder (für Go 1.10 und höher):
Dies ist die bevorzugte und effizienteste Methode für Go 1.10 und oben:
import "strings" func ioReaderToString(r io.ReadCloser) (string, error) { buf := new(strings.Builder) if _, err := io.Copy(buf, r); err != nil { return "", err } return buf.String(), nil }
Legacy-Methode (für Go <= 1.9):
[Hinweis: Diese Lösung ist veraltet und wird nicht mehr empfohlen Strings.Builder.]
import "bytes" buf := new(bytes.Buffer) if _, err := buf.ReadFrom(r); err != nil { return "", err }
s := buf.String()
Unsichere Methode (Fortgeschritten und Riskant):
[Mit äußerster Vorsicht verwenden]
import "bytes" buf := new(bytes.Buffer) if _, err := buf.ReadFrom(r); err != nil { return "", err }
b := buf.Bytes()
import "unsafe" s := *(*string)(unsafe.Pointer(&b))
Vorbehalte von Unsafe Methode:
Empfehlung:
Bleiben Sie bei der Strings.Builder-Methode da es effizient und sicher ist und die Fallstricke der unsicheren Methode vermeidet.
Das obige ist der detaillierte Inhalt vonWie kann ich einen io.Reader in Go effizient in einen String konvertieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!