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 :
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!