Dans Go, les paramètres de résultat nommés permettent d'attribuer des valeurs spécifiques à renvoyer par un fonction. Cependant, ce comportement diffère des fonctions qui renvoient sans paramètres de résultat nommés, ce qui peut soulever des questions.
Considérez le code suivant, où NormalReturns et NamedReturns sont des fonctions qui tentent de renvoyer une erreur en cas de panique :
func NormalReturns(n int) error { var err error defer catch(&err) panicIf42(n) return err } func NamedReturns(n int) (err error) { defer catch(&err) panicIf42(n) return }
Lorsqu'une panique est déclenchée dans panicIf42, NormalReturns renvoie zéro, même si l'on pourrait s'attendre à une erreur. Cela se produit parce que la fonction de capture différée attribue l'erreur une fois que la panique a rendu le contrôle à l'appelant.
En revanche, NamedReturns renvoie la valeur d'erreur modifiée car les paramètres de résultat nommés permettent aux fonctions différées de les modifier. Lorsque la panique se produit, la fonction de capture différée attribue l'erreur, qui est conservée et renvoyée à la fin de la fonction.
Spécifications pour les instructions de retour :
"Tous les résultats les valeurs sont initialisées aux valeurs zéro pour leur type lors de l'entrée dans la fonction... Une instruction « return » qui spécifie les résultats définit les paramètres de résultat avant que les fonctions différées ne soient exécuté."
Spécifications pour les instructions différées :
"Les fonctions différées peuvent accéder et modifier les paramètres de résultat avant qu'ils ne soient renvoyés."
Par conséquent, dans NormalReturns, puisqu'il n'y a pas de paramètres de résultat nommés, la valeur de retour est initialisée à zéro et reste nulle après la panique. Dans NamedReturns, la fonction différée modifie le paramètre de résultat err et sa valeur est utilisée comme erreur renvoyée.
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!