Maison > développement back-end > Golang > Pourquoi l'impression d'un `bytes.Buffer` dans Go affiche-t-elle parfois le contenu de la chaîne et parfois sa représentation interne ?

Pourquoi l'impression d'un `bytes.Buffer` dans Go affiche-t-elle parfois le contenu de la chaîne et parfois sa représentation interne ?

DDD
Libérer: 2024-12-13 10:28:26
original
173 Les gens l'ont consulté

Why does printing a `bytes.Buffer` in Go sometimes show the string content and sometimes show its internal representation?

Comportement différent lors de l'impression d'un bytes.Buffer dans Go

Lors de l'utilisation du type bytes.Buffer, les utilisateurs peuvent rencontrer un comportement différent lors de l'impression d'objets de ce type. Le code suivant :

buf := new(bytes.Buffer)
buf.WriteString("Hello world")
fmt.Println(buf)
Copier après la connexion

imprime "Hello World", tandis que ce code :

var buf bytes.Buffer
buf.WriteString("Hello world")
fmt.Println(buf)
Copier après la connexion

imprime ce qui suit :

{[72 101 108 108 111 32 119 111 114 108 100] 0 [72 101 108 108 111 32 119 111 114 108 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] 0}
Copier après la connexion

Cette divergence apparente est due au fait que de l'existence d'une méthode String() pour le type bytes.Buffer. Lors de l'impression d'une valeur de type bytes.Buffer, la méthode String() est appelée pour produire la représentation sous forme de chaîne de la valeur. Cependant, lors de l'impression d'une valeur de type bytes.Buffer, aucune méthode de ce type n'est disponible et le format par défaut d'une structure est utilisé, ce qui donne la représentation vue ci-dessus.

Le comportement différent est en outre illustré par le suivant :

type MyBuffer bytes.Buffer

func (b *MyBuffer) String() string {
    return "MyBuffer with " + b.String()
}

var b MyBuffer
b.WriteString("Hello world")
fmt.Println(b)
Copier après la connexion

Dans ce cas, lorsqu'une valeur MyBuffer est imprimée, la méthode String() personnalisée est appelée et le préfixe "MyBuffer with ..." est ajouté à la sortie, démontrant le effet de l'implémentation de la méthode String().

Comprendre ce comportement est crucial lorsque vous travaillez avec le type bytes.Buffer dans Go, car il affecte le formatage de la sortie et peut conduire à des résultats inattendus s'il n'est pas correctement géré.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal