Maison > développement back-end > Golang > Comment ajouter correctement des tranches d'octets et des tableaux dans Go ?

Comment ajouter correctement des tranches d'octets et des tableaux dans Go ?

Susan Sarandon
Libérer: 2024-12-08 18:04:13
original
734 Les gens l'ont consulté

How to Correctly Append Byte Slices and Arrays in Go?

Ajout de tranches d'octets et de tableaux dans Go : dépannage et solutions

Dans Go, l'ajout de tranches de tableau de deux octets peut entraîner des erreurs inattendues. Considérez le code suivant :

one := make([]byte, 2)
two := make([]byte, 2)
one[0] = 0x00
one[1] = 0x01
two[0] = 0x02
two[1] = 0x03

log.Printf("%X", append(one[:], two[:]))

three := []byte{0, 1}
four := []byte{2, 3}

five := append(three, four)
Copier après la connexion

Ce code produit les erreurs suivantes :

cannot use four (type []uint8) as type uint8 in append
cannot use two[:] (type []uint8) as type uint8 in append
Copier après la connexion

Contrairement à la réputation de Go pour ses tranches robustes, ces erreurs semblent inexplicables. Pour comprendre et résoudre ce problème, nous devons approfondir la spécification du langage de programmation Go.

Comprendre la spécification

Selon la spécification Go, la fonction d'ajout prend un tranche s de type S et zéro ou plusieurs valeurs x de type T, où T est le type d'élément de S. Le résultat est une nouvelle tranche de type S avec les éléments de s suivis des éléments de x.

Essentiellement, pour l'argument final, s'il est attribuable à un type de tranche []T, il peut être transmis inchangé comme valeur d'un paramètre ...T s'il est suivi de ....

Résoudre les erreurs

Dans le code fourni, l'argument final à ajouter n'est pas suivi de .... Pour résoudre ce problème, nous devons spécifier explicitement []T... pour l'argument final. Dans notre cas, T est un octet, donc le code devrait être :

fmt.Println(append(one[:], two[:]...))
Copier après la connexion

Pour le deuxième exemple, nous devrions faire une modification similaire :

five := append(three, four...)
Copier après la connexion

Notes supplémentaires

  • L'opérateur ... dans Go nous permet de passer une tranche en variadique argument.
  • Lors de l'ajout de tranches de longueurs différentes, la tranche résultante aura une longueur égale à la somme des longueurs des tranches d'entrée.
  • La syntaxe []T... est également utilisé lorsque l'on veut initialiser une tranche avec une liste variadique de éléments.

Conclusion

En comprenant les nuances de la fonction append et les directives de la spécification Go pour les arguments variadiques, nous pouvons efficacement ajouter des tableaux d'octets dans Go et éviter les erreurs rencontrées dans le code original.

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