Maison > développement back-end > Golang > Pourquoi l'impression d'un « bytes.Buffer » dans Go produit-elle des résultats différents selon qu'il s'agit d'un pointeur ou d'une valeur ?

Pourquoi l'impression d'un « bytes.Buffer » dans Go produit-elle des résultats différents selon qu'il s'agit d'un pointeur ou d'une valeur ?

Mary-Kate Olsen
Libérer: 2024-11-19 15:53:02
original
713 Les gens l'ont consulté

Why Does Printing a `bytes.Buffer` in Go Produce Different Results Depending on Whether It's a Pointer or a Value?

Comportement différent des tampons d'octets imprimés dans Go

En Go, l'impression d'un octet. La valeur du tampon peut produire des sorties distinctes selon qu'il s'agit d'un pointeur ou une valeur régulière.

Lors de la création d'un bytes.Buffer avec new(bytes.Buffer), nous obtenons un pointeur vers un buffer. Accéder à la méthode String() de la valeur et l'imprimer génère le contenu du tampon : Hello World.

Cependant, utiliser var buf bytes.Buffer crée directement une valeur de type bytes.Buffer. Cette valeur n'a pas la méthode String(), donc son format par défaut est imprimé. Cela donne la sortie détaillée : {[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}.

Cette différence se produit car Go recherche une méthode String() lors de l'impression des valeurs. Si elle existe, la méthode est invoquée pour obtenir la représentation de la valeur. Pour les valeurs de pointeur, telles que *bytes.Buffer, la méthode String() est disponible, mais pour les valeurs normales comme bytes.Buffer, elle ne l'est pas.

Contrairement aux pointeurs, les valeurs normales ont un format par défaut différent une fois imprimé : {field0 field1 ...}, affichant leurs champs. Ceci explique les différentes sorties observées lors de l'impression des valeurs bytes.Buffer selon qu'il s'agit de pointeurs ou de valeurs régulières.

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