Maison > développement back-end > Golang > 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
Libérer: 2024-10-24 17:43:02
original
473 Les gens l'ont consulté

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[:])
Copier après la connexion

Rejoint :

u.Pwhash = hex.EncodeToString(sha1.Sum([]byte(uf.Pwd))[:])
Copier après la connexion

Le code modifié déclenche l'erreur :

invalid operation sha1.Sum(([]byte)(uf.Pwd))[:] (slice of unaddressable value)
Copier après la connexion

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!

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