Maison > développement back-end > Golang > le corps du texte

**Pourquoi ne puis-je pas découper la valeur de retour d'une fonction dans Go ?**

DDD
Libérer: 2024-10-24 21:16:29
original
660 Les gens l'ont consulté

**Why Can't I Slice the Return Value of a Function in Go?**

Comportement différent entre les variables et les valeurs de retour dans les fonctions

Lors de l'utilisation de fonctions dans Go, il est crucial de comprendre la distinction entre les variables et les valeurs de retour en termes d'adressabilité et de comportement ultérieur.

Code d'origine et erreur

Considérez l'extrait de code suivant :

<code class="go">hash := sha1.Sum([]byte(uf.Pwd))
u.Pwhash = hex.EncodeToString(hash[:])</code>
Copier après la connexion

Ce code fonctionne comme attendu. Cependant, si nous essayons de combiner les deux lignes :

<code class="go">u.Pwhash = hex.EncodeToString(sha1.Sum([]byte(uf.Pwd))[:])</code>
Copier après la connexion

nous rencontrons l'erreur suivante :

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

Raison de l'erreur

L'erreur survient car dans la ligne combinée, nous essayons de découper directement la valeur de retour de la fonction sha1.Sum() :

<code class="go">sha1.Sum(([]byte)(uf.Pwd))[:]</code>
Copier après la connexion

Les valeurs de retour de la fonction dans Go ne sont pas adressables. Selon la spécification du langage, les valeurs adressables incluent les variables, les indirections de pointeurs, les opérations d'indexation de tranches, les sélecteurs de champs de structures adressables, les opérations d'indexation de tableaux de tableaux adressables et, à titre d'exception, les littéraux composites. Découper un tableau nécessite que le tableau soit adressable.

Résolution

Le code d'origine fonctionne car nous attribuons d'abord la valeur de retour de sha1.Sum() à une variable locale (hachage), ce qui rend le tableau adressable et donc éligible au découpage. Par conséquent, il est généralement recommandé de stocker les valeurs de retour dans des variables avant d'effectuer des opérations sur celles-ci pour éviter de telles erreurs et garantir l'adressabilité.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!