Problème de retour de valeurs multiples dans Go
Dans Go, il est possible de renvoyer plusieurs valeurs à partir d'une fonction en utilisant plusieurs affectations. Cependant, certaines exigences spécifiques doivent être remplies.
Considérez le code suivant :
func FindUserInfo(id string) (Info, bool) { it, present := all[id] // Valid comma ok assignment pattern return it, present }
Ce code utilise correctement le modèle "virgule ok" pour obtenir plusieurs valeurs de la carte chercher. La valeur booléenne actuelle indique si la clé a été trouvée dans la carte.
Cependant, le code suivant n'est pas valide :
func FindUserInfo(id string) (Info, bool) { return all[id] // Invalid, without a comma ok expression }
Le compilateur signale cela comme une erreur, indiquant qu'il existe plusieurs valeurs à renvoyer, mais une seule variable est affectée. Cette erreur se produit car Go nécessite une affectation explicite de toutes les valeurs de retour.
Pour développer cette erreur, le langage Go utilise une règle « d'équivalence de type » pour l'affectation. Dans la plupart des cas, cela signifie que l'attribution d'une valeur d'un type à une variable d'un autre type entraînera une erreur de compilation. Cependant, lors de l'accès à une carte, une exception est faite.
L'accès à une carte renvoie un tuple à deux valeurs : la valeur sous-jacente et un booléen indiquant si la clé a été trouvée. Ce tuple est généralement attribué à une paire de variables à l'aide du modèle "virgule ok".
Le compilateur Go est spécifiquement conçu pour autoriser ce modèle, même s'il semble violer la règle d'équivalence de type. Par conséquent, vous ne pouvez pas attribuer une valeur de mappage directement à plusieurs variables sans utiliser une expression virgule ok.
Dans votre cas, vous pouvez éviter d'utiliser des variables temporaires en vous assurant de toujours utiliser le modèle virgule ok lorsque vous accédez à un carte. Cela garantit que les multiples valeurs sont correctement attribuées et que le compilateur ne signalera aucune erreur.
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!