Maison > développement back-end > Golang > Pourquoi l'impression d'un « bytes.Buffer » dans Go produit-elle une sortie différente selon qu'un pointeur ou une valeur est utilisé ?

Pourquoi l'impression d'un « bytes.Buffer » dans Go produit-elle une sortie différente selon qu'un pointeur ou une valeur est utilisé ?

Linda Hamilton
Libérer: 2024-11-23 01:34:27
original
846 Les gens l'ont consulté

Why Does Printing a `bytes.Buffer` in Go Produce Different Output Depending on Whether a Pointer or Value is Used?

Comportement différent lors de l'impression d'un octet.Buffer en Go

En Go, lors de l'impression d'un octet.Buffer en utilisant fmt.Println(), le comportement peut varier selon que vous utilisez un pointeur vers un bytes.Buffer ou la valeur directement. Voici une explication :

Dans le premier exemple :

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

buf est un pointeur vers un bytes.Buffer, ce qui signifie qu'il a une méthode String() disponible. Lorsque vous passez un pointeur vers fmt.Println(), la méthode String() est appelée automatiquement, ce qui convertit le contenu de bytes.Buffer en chaîne. C'est pourquoi vous voyez « Hello World » imprimé.

Dans le deuxième exemple :

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

buf est une valeur de type bytes.Buffer, pas un pointeur. Par conséquent, la méthode String() n'est pas disponible pour cette valeur. Au lieu de cela, fmt.Println() l'imprime comme une valeur de structure normale, en utilisant le format par défaut {field0 field1 ...}. Les champs ici sont les octets stockés dans le tampon, représentés comme une tranche d'entiers.

Pour toujours imprimer le contenu d'un octet.Buffer sous forme de chaîne, que vous utilisiez un pointeur ou une valeur, vous pouvez appelez explicitement la méthode String() avant d'imprimer :

fmt.Println(buf.String())
Copier après la connexion

Cela garantira un comportement cohérent dans les deux cas.

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