Maison >développement back-end >Golang >Pourquoi l'ajout de tableaux de tranches d'octets dans Go produit-il des erreurs inattendues ?

Pourquoi l'ajout de tableaux de tranches d'octets dans Go produit-il des erreurs inattendues ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-03 00:03:16201parcourir

Why Does Appending Byte Slice Arrays in Go Produce Unexpected Errors?

Ajout de tableaux de tranches de deux octets dans Go : comprendre les erreurs inattendues de l'ajout

Lorsque vous essayez d'ajouter des tranches de tableau de deux octets dans Go, il est possible de rencontrer des erreurs liées à des données incompatibles genres. Dans le code fourni, le problème survient lorsque vous essayez d'utiliser []byte comme argument pour la fonction variadique append().

La spécification du langage de programmation Go définit la syntaxe de append() comme :

append(s S, x ...T) S  // T is the element type of S

Ici, s est la tranche à laquelle les éléments sont ajoutés, et x est la liste variadique des éléments à ajouter. Le type de T doit correspondre au type d'élément de S.

Dans l'exemple de code, un et deux sont tous deux des tranches de tableau d'octets, leur type d'élément est donc []byte. Cependant, l'argument final two[:] n'est pas suivi de ..., ce qui signifie que Go tente de le traiter comme une valeur []byte unique au lieu d'une tranche. Cela entraîne l'erreur :

cannot use two[:] (type []uint8) as type uint8 in append

Pour résoudre cette erreur, vous devez utiliser ... après l'argument final de la tranche pour indiquer qu'il s'agit d'une tranche variadique. Le code corrigé est :

package main

import "fmt"

func main() {
    one := make([]byte, 2)
    two := make([]byte, 2)
    ...
    fmt.Println(append(one[:], two[:]...))
    ...
}

En suivant cette syntaxe, Go ajoutera correctement les éléments de deux[:] en un seul[:].

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!

Déclaration:
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