Fréquemment par écrit, allez des applications, je me trouve avec le choix d'utiliser []byte
ou string
. En dehors de l'éventuelle mutabilité de []byte
Comment puis-je décider lequel utiliser?
J'ai plusieurs cas d'utilisation pour des exemples:
[]byte
. Puisque la capacité de la tranche est fixée, quelle raison est-elle là pour ne pas renvoyer une chaîne?[]byte
ne sont pas imprimés aussi bien que string
par défaut, donc je me trouve souvent jetant à string
à des fins de journalisation. Devrait-il toujours être un string
?[]byte
, une nouvelle matrice sous-jacente est toujours créée. Si les données à adopter sont constantes, pourquoi ne pas être un string
?Mon conseil serait d'utiliser String Par défaut lorsque vous travaillez avec du texte. Mais utilisez [] octet à la place si l'une des conditions suivantes s'applique:
L'mutabilité d'un octet [] réduira considérablement le nombre d'allocations nécessaires.
Vous avez affaire à une API qui utilise [] octet et évitez une conversion en chaîne simplifiera votre code.
Une différence est que le retour []byte
Peut être potentiellement réutilisé pour contenir une autre/de nouvelles données (sans nouvelle allocation de mémoire), tandis que string
ne peut pas. Un autre est que, dans la mise en œuvre du CPG au moins, string
est une entité inférieure d'un mot que []byte
. Peut être utilisé pour sauver une certaine mémoire lorsqu'il y a beaucoup d'articles de ce type.
Jeter un []byte
à string
pour la journalisation n'est pas nécessaire. Verbes typiques de "texte", comme %s
, %q
Travailler pour string
et []byte
expressions de manière égale. Dans l'autre direction, il en va de même pour par exemple. %x
ou % 02x
.
Dépend de la raison pour laquelle la concaténation est-elle effectuée et si le résultat doit être encore combiné avec quelque chose/ailleurs après. Si c'est le cas alors []byte
peut performer mieux.