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!