Maison  >  Article  >  développement back-end  >  Pourquoi une tranche « sha1.Sum » provoque-t-elle une erreur « Opération invalide : tranche de valeur non adressable » dans Go ?

Pourquoi une tranche « sha1.Sum » provoque-t-elle une erreur « Opération invalide : tranche de valeur non adressable » dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-24 17:43:02366parcourir

Why Does a `sha1.Sum` Slice Cause an

Erreur inattendue lors de la jointure de lignes

Lors de la tentative de modification du code suivant pour joindre deux lignes, un message erroné apparaît :

Original :

hash := sha1.Sum([]byte(uf.Pwd))
u.Pwhash = hex.EncodeToString(hash[:])

Rejoint :

u.Pwhash = hex.EncodeToString(sha1.Sum([]byte(uf.Pwd))[:])

Le code modifié déclenche l'erreur :

invalid operation sha1.Sum(([]byte)(uf.Pwd))[:] (slice of unaddressable value)

Comprendre le problème

Cette erreur survient car dans le code modifié, la valeur de retour de l'appel de fonction sha1.Sum est directement découpée. Les valeurs de retour des fonctions ne sont pas adressables et ne peuvent donc pas être découpées.

Adressabilité dans Go

Dans Go, seules certaines entités sont adressables, notamment :

  • Variables
  • Indirections de pointeurs
  • Indexation de tranches
  • Sélecteurs de champs de structures adressables
  • Indexation de tableau à l'aide d'un tableau adressable (exception : les littéraux composites )

L'erreur se produit car sha1.Sum renvoie un tableau, qui n'est adressable que lorsqu'il est stocké dans une variable locale comme dans le code d'origine.

Solution

Pour résoudre le problème, la valeur de retour de sha1.Sum doit d'abord être stockée dans une variable locale, en lui donnant une référence adressable.

Conclusion

Comprendre le concept d'adressabilité est crucial dans Go pour éviter de telles erreurs lors du découpage des tableaux. Assurez-vous toujours que l'entité découpée est adressable, soit directement, soit via une affectation de variable intermédiaire.

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