"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Pourquoi les fonctions Go ne peuvent-elles pas renvoyer directement plusieurs valeurs ?

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

Publié le 2024-11-20
Parcourir:894

Why Can't Go Functions Return Multiple Values Directly?

Problème de retour de plusieurs valeurs avec 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 « Comma 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.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3