Maison > développement back-end > Golang > Pourquoi `recover()` renvoie-t-il `nil` dans les fonctions différées imbriquées dans Go ?

Pourquoi `recover()` renvoie-t-il `nil` dans les fonctions différées imbriquées dans Go ?

Patricia Arquette
Libérer: 2024-11-24 06:56:09
original
989 Les gens l'ont consulté

Why Does `recover()` Return `nil` in Nested Deferred Functions in Go?

Comportement de Recover() dans les fonctions différées imbriquées

Dans Go, panic() et recovery() sont utilisés pour gérer les erreurs d'exécution . Cependant, les erreurs récupérables doivent être gérées par des fonctions différées.

Cas simple :

Dans un scénario simple de fonction différée, recovery() fonctionne comme prévu :

package main

import "fmt"

func printRecover() {
    r := recover()
    fmt.Println("Recovered:", r)
}

func main() {
    defer printRecover()
    panic("OMG!")
}
Copier après la connexion

Cas différé imbriqué :

Lorsque printRecover() est enveloppé dans une fonction différée imbriquée :

func main() {
    defer func() {
        printRecover()
    }()
    panic("OMG!")
}
Copier après la connexion

le comportement change. recovery() dans printRecover() renvoie zéro. En effet :

Selon la spécification Go :

La valeur de retour de recovery() est nulle si recovery() n'a pas été appelée directement par une fonction différée.

Dans le cas imbriqué, printRecover() est appelée par la fonction différée imbriquée, et non directement par la fonction initiale un.

Conclusion :

Pour que recovery() fonctionne dans des fonctions différées imbriquées, elle doit être appelée directement par la fonction différée qui gère la panique. Lorsque cette condition n'est pas remplie, recovery() retournera nul.

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