Maison  >  Article  >  développement back-end  >  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
Linda Hamiltonoriginal
2024-11-23 01:34:27731parcourir

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)

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)

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

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