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 ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-24 18:19:02972parcourir

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

Variabilité du comportement des valeurs de retour des variables et des fonctions

En programmation, il est essentiel de comprendre la distinction de comportement entre les variables et les valeurs de retour des fonctions. 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 prévu, où la variable de hachage stocke le hachage SHA1 d'un tableau d'octets et la variable u.Pwhash contient la représentation hexadécimale de ce hachage.

Cependant, si nous essayons de combiner ces deux lignes en une seule, nous rencontrons une erreur :

<code class="go">u.Pwhash = hex.EncodeToString(sha1.Sum([]byte(uf.Pwd))[:])</code>

Le message d'erreur indique qu'il n'est pas valide de découper la valeur de retour de sha1.Sum(). Cette différence se produit parce que :

  • Variables : Les variables comme le hachage sont adressables, ce qui signifie qu'elles représentent un emplacement en mémoire où les données peuvent être stockées et récupérées.
  • Valeurs de retour de fonction : Contrairement aux variables, les valeurs de retour des appels de fonction (comme sha1.Sum()) ne sont pas adressables. Ce sont des valeurs temporaires créées et détruites lors de l'exécution de la fonction.

Dans le deuxième extrait, nous tentons de découper sha1.Sum()[:], ce qui n'est pas autorisé car la valeur de retour de sha1.Sum () n'est pas adressable. Une opération slice nécessite que ses opérandes soient adressables.

Par conséquent, pour combiner correctement les lignes, nous devons d'abord stocker la valeur de retour de sha1.Sum() dans une variable adressable comme hash avant de la découper :

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

Comprendre l'adressabilité et le comportement des variables et des valeurs de retour des fonctions est crucial pour écrire du code Go correct et efficace.

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