Maison > développement back-end > Golang > Go Retours nommés par rapport aux retours normaux : pourquoi la gestion de la panique est-elle différente ?

Go Retours nommés par rapport aux retours normaux : pourquoi la gestion de la panique est-elle différente ?

Susan Sarandon
Libérer: 2024-12-07 03:31:10
original
771 Les gens l'ont consulté

Go Named Returns vs. Normal Returns: Why Does Panic Handling Differ?

Pourquoi un retour normal cache une panique, alors qu'un retour nommé la fournit à l'appelant

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
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal