Maison  >  Article  >  développement back-end  >  Pourquoi Go nécessite-t-il une affectation explicite pour les retours à valeurs multiples ?

Pourquoi Go nécessite-t-il une affectation explicite pour les retours à valeurs multiples ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-06 18:24:03204parcourir

Why Does Go Require Explicit Assignment for Multi-Value Returns?

Problème de retour de valeurs multiples Go

Dans Go, renvoyer plusieurs valeurs à partir d'une fonction est une pratique courante, mais certaines limitations de syntaxe peuvent survenir . Voyons pourquoi les extraits de code suivants se comportent différemment :

Code valide :

func FindUserInfo(id string) (Info, bool) {
    it, present := all[id]
    return it, present
}

Code invalide :

func FindUserInfo(id string) (Info, bool) {
    return all[id]
}

Raison de la syntaxe invalide :

Le deuxième extrait de code tente de renvoyer deux valeurs directement à partir de la recherche de carte all[id]. Cependant, Go nécessite l'affectation explicite de plusieurs valeurs de retour.

Modèle "Comma Ok" :

Le modèle Go "Comma Ok" est un mécanisme permettant d'extraire une valeur et un indicateur booléen (généralement nommé ok) pour accéder à une touche de carte. Ce modèle est pris en charge pour les cartes, les canaux et les assertions de type.

Dans votre cas, il s'agit de la valeur récupérée, et present est un booléen indiquant si la clé existe dans la carte. L'affectation avec séparation par des virgules, présente := all[id] utilise implicitement ce modèle.

Comprendre la méthode Unpack :

En interne, Go utilise la méthode unpack pour gérer plusieurs attributions de valeurs. Cette méthode détermine si l'affectation est un cas "virgule ok" en fonction du mode des opérandes (par exemple, indexation de carte, valeur de canal, assertion de type).

Par défaut, la méthode unpack autorise uniquement les affectations par virgule ok lorsque vous effectuez des tâches avec deux variables sur le côté gauche. Cette restriction est définie dans la méthode Checker.initVars().

Conclusion :

Le modèle "virgule ok" dans Go permet de récupérer plusieurs valeurs à partir de cartes, de canaux, et tapez des assertions. Cependant, une affectation explicite des valeurs de retour est requise et le compilateur limite les affectations de virgule ok aux scénarios dans lesquels deux variables sont présentes sur le côté gauche.

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