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)
imprime "Hello World", tandis que ce code :
var buf bytes.Buffer buf.WriteString("Hello world") fmt.Println(buf)
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}
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)
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!