Maison >développement back-end >Golang >Comment puis-je convertir efficacement un io.Reader en une chaîne en Go ?

Comment puis-je convertir efficacement un io.Reader en une chaîne en Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-29 13:46:12221parcourir

How Can I Efficiently Convert an io.Reader to a String in Go?

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.]

  1. Lire le flux dans un bytes.Buffer :
import "bytes"

buf := new(bytes.Buffer)
if _, err := buf.ReadFrom(r); err != nil {
    return "", err
}
  1. Convertir le tampon en chaîne (une opération de copie inefficace se produit ici) :
s := buf.String()

Méthode non sécurisée (avancée et Risqué) :

[À utiliser avec une extrême prudence]

  1. Lire le flux en octets.Buffer :
import "bytes"

buf := new(bytes.Buffer)
if _, err := buf.ReadFrom(r); err != nil {
    return "", err
}
  1. Convertir le tampon en octet slice :
b := buf.Bytes()
  1. Dangereux convertir la tranche d'octets en chaîne :
import "unsafe"

s := *(*string)(unsafe.Pointer(&b))

Avertissements concernant les risques Méthode :

  • Peut ne pas fonctionner dans tous les compilateurs ou architectures.
  • La chaîne résultante est mutable, ce qui peut entraîner un comportement inattendu.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn