Maison  >  Article  >  développement back-end  >  **Pourquoi ne puis-je pas découper la valeur de retour d'une fonction dans Go ?**

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

DDD
DDDoriginal
2024-10-24 21:16:29654parcourir

**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>

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>

nous rencontrons l'erreur suivante :

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

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>

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!

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