Renvoyer plusieurs valeurs dans Go : comprendre les restrictions nuancées
Dans Go, renvoyer plusieurs valeurs vous permet de renvoyer plusieurs résultats à partir d'une seule fonction . Cependant, tous les scénarios de rendements multiples ne sont pas considérés comme valables. Explorons les contraintes et une exception notable à cette règle.
Pourquoi l'exemple de deux valeurs de retour est valide
L'exemple que vous avez fourni :
func FindUserInfo(id string) (Info, bool) { it, present := all[id] return it, present }
est valide car il suit le modèle "virgule ok". Cet idiome est spécifiquement utilisé lors de l'accès à une clé de carte :
mapValue, ok := map[key]
Afin de récupérer à la fois la valeur de la carte et le statut "ok", nous devons les attribuer à des variables. Le compilateur comprend que les variables "it" et "present" sont utilisées pour déstructurer le résultat de l'opération d'indexation de la carte.
Pourquoi l'exemple d'une valeur de retour est invalide
En revanche, l'exemple suivant :
func FindUserInfo(id string) (Info, bool) { return all[id] }
est invalide car il ne déstructure pas l'opération d'indexation de la carte. Cela conduirait à une valeur de retour unique, qui n'est pas compatible avec le type de retour spécifié de la fonction.
Évitement des variables temporaires impossible
Ce n'est actuellement pas le cas possible d'éviter les variables temporaires dans ce scénario spécifique. L'idiome "virgule ok" nécessite l'affectation explicite des valeurs déstructurées aux variables.
Conclusion
Comprendre les nuances de plusieurs valeurs de retour dans Go est crucial. Bien que le modèle « virgule ok » autorise plusieurs valeurs de retour, il est limité à l'indexation de cartes, à la récupération de canaux et aux assertions de type. Par conséquent, dans votre cas, des variables temporaires sont nécessaires lors du renvoi à la fois d'une valeur et d'un statut « ok » à partir d'une opération d'indexation de carte.
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!