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 18:25:33650parcourir

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

Comprendre le comportement des variables et des valeurs de retour dans Go

Un problème courant survient lors de la tentative de jointure de lignes de code impliquant des tableaux et des appels de fonction . Par exemple, considérons le code original suivant qui réussit à joindre deux lignes :

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

Cependant, si vous essayez de combiner le code en une seule ligne, vous pouvez rencontrer un message d'erreur :

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

Le message d'erreur indique un problème de découpage de la valeur de retour d'un appel de fonction. Dans Go, les valeurs de retour des appels de fonction, comme celle de sha1.Sum(), ne sont pas adressables.

Pour comprendre ce comportement, il est important de savoir quels sont les types adressables dans Go. Selon la spécification Go, seuls les éléments suivants sont adressables :

  • Variables
  • Indirections de pointeur
  • Opérations d'indexation de tranches de structures adressables
  • Indexation de tableau opérations de tableaux adressables
  • Littéraux composites (exemptés de l'exigence d'adressabilité)

Étant donné que la valeur de retour de sha1.Sum() n'est pas l'un de ces types, elle ne peut pas être découpée. Découper un tableau, comme requis ici, nécessite que le tableau soit adressable.

Dans la première ligne du code d'origine, le tableau renvoyé est stocké dans une variable locale (hachage), qui est adressable. Dans la deuxième ligne, hex.EncodeToString(hash[:]) est calculé, ce qui fonctionne comme prévu.

Cette distinction entre les variables et les valeurs de retour souligne l'importance de comprendre les règles d'adressage de Go. En suivant ces règles, vous pouvez éviter les erreurs courantes et écrire un code plus robuste.

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