Maison > Article > développement back-end > Pourquoi les fonctions Go ne peuvent-elles pas renvoyer directement plusieurs valeurs ?
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.
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.
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.
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!