Maison  >  Article  >  développement back-end  >  Pourquoi les fonctions Go ne peuvent-elles pas renvoyer directement plusieurs valeurs ?

Pourquoi les fonctions Go ne peuvent-elles pas renvoyer directement plusieurs valeurs ?

DDD
DDDoriginal
2024-11-07 17:13:03339parcourir

Why Can't Go Functions Return Multiple Values Directly?

Problème de retour de plusieurs valeurs dans Go

Lorsque vous essayez de renvoyer plusieurs valeurs dans Go, il peut sembler déroutant de savoir pourquoi certaines syntaxes sont valides alors que d'autres ne le sont pas. Pour illustrer cela, considérons les deux extraits de code suivants :

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

Le premier extrait de code est valide et renvoie à la fois les valeurs Info et booléennes. Cependant, le deuxième extrait n'est pas valide :

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

Cela soulève la question de savoir pourquoi le premier extrait est valide et le second ne l'est pas. De plus, on peut se demander s'il existe un moyen d'éviter d'utiliser des variables temporaires comme celle-ci et présentes.

Expliquer le modèle « Virgule Ok »

La clé pour comprendre ce comportement réside dans la « virgule ok" modèle. Dans Go, lors de l'accès à une carte, le résultat est une paire de valeurs : la valeur associée à la clé et un booléen indiquant si la clé existe dans la carte. Ceci est souvent utilisé pour faire la différence entre une clé manquante et une valeur nulle.

Dans le premier extrait de code, l'expression all[id] renvoie une paire de valeurs qui lui sont attribuées et présentes. L'instruction return renvoie ensuite ces valeurs.

Considérations sur le compilateur

Le compilateur joue un rôle pour déterminer si une affectation à valeurs multiples est valide. Si la fonction renvoie plusieurs valeurs mais que le destinataire de gauche n'a qu'une seule variable, le compilateur générera une erreur. En effet, le compilateur s'attend à ce que le nombre de valeurs renvoyées corresponde au nombre de variables qui les reçoivent.

Dans le cas du deuxième extrait de code, l'expression return all[id] ne renvoie qu'une seule valeur, ce qui est incompatible. avec les deux variables du côté gauche. Par conséquent, le compilateur signale une erreur.

Éviter les variables temporaires

Malheureusement, il n'existe aucun moyen d'éviter d'utiliser des variables temporaires lors du renvoi de plusieurs valeurs dans une fonction Go. En effet, le compilateur exige que le nombre de valeurs renvoyées corresponde au nombre de variables les recevant. Cependant, il est possible de minimiser l'utilisation de variables temporaires en utilisant des valeurs de retour nommées ou en renvoyant une structure.

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