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
Libérer: 2024-12-29 13:46:12
original
221 Les gens l'ont consulté

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
}
Copier après la connexion

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
}
Copier après la connexion
Copier après la connexion
  1. Convertir le tampon en chaîne (une opération de copie inefficace se produit ici) :
s := buf.String()
Copier après la connexion

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
}
Copier après la connexion
Copier après la connexion
  1. Convertir le tampon en octet slice :
b := buf.Bytes()
Copier après la connexion
  1. Dangereux convertir la tranche d'octets en chaîne :
import "unsafe"

s := *(*string)(unsafe.Pointer(&b))
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal