Convertir efficacement io.Reader en String
Problème :
Envisagez un io.ReadCloser objet obtenu à partir d’un http.Response. Comment convertir efficacement l'intégralité du flux en chaîne ?
Solution :
Utilisation de Strings.Builder (pour Go 1.10 et versions ultérieures) :
C'est la méthode préférée et la plus efficace pour Go 1.10 et ci-dessus :
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 }
Méthode héritée (For Go <= 1.9) :
[Remarque : Cette solution est obsolète et n'est pas recommandée en faveur de Strings.Builder.]
import "bytes" buf := new(bytes.Buffer) if _, err := buf.ReadFrom(r); err != nil { return "", err }
s := buf.String()
Méthode non sécurisée (avancée et Risqué) :
[À utiliser avec une extrême prudence]
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))
Avertissements concernant les risques Méthode :
Recommandation :
S'en tenir à la méthode Strings.Builder car il est efficace, sûr et évite les pièges de la méthode dangereuse.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!