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)
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
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[:]...))
Pour le deuxième exemple, nous devrions faire une modification similaire :
five := append(three, four...)
Notes supplémentaires
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!