Maison  >  Article  >  développement back-end  >  Pouvez-vous paniquer dans le cadre d'une fonction différée lors d'une panique existante à Golang ?

Pouvez-vous paniquer dans le cadre d'une fonction différée lors d'une panique existante à Golang ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-02 12:03:03357parcourir

Can You Panic Within a Defer Function During an Existing Panic in Golang?

Est-il acceptable de paniquer lors d'un report de fonctions, en particulier lorsqu'une panique se produit déjà ?

Contexte :

Dans le code fourni :

<code class="go">func sub(){
    defer func (){
        panic(2)
    }()
    panic(1)
}

func main(){
    defer func(){
        x:=recover()
        println(x.(int));
    }()
    sub()
}</code>

Il semble que la première panique (panic(1)) soit "écrasée" par la deuxième panique (panic(2)).

Est-ce que Est-ce acceptable ?

À Golang, paniquer suite à une fonction différée ne constitue pas une condition distincte ou exceptionnelle. Cela indique simplement que la séquence de panique persistera.

Comme démontré dans l'exemple de code, il est permis d'appeler une fonction Golang qui pourrait paniquer dans une fonction de report. Même lorsqu'une panique se produit déjà, il est acceptable de paniquer dans le cadre d'une fonction de report.

Mécanisme :

Selon la spécification Go :

"Si D revient normalement, sans déclencher une nouvelle panique, la séquence de panique s'arrête."

Dans l'exemple, la fonction différée (D) revient sans déclencher une nouvelle panique. Par conséquent, la séquence de panique initiée par panic(1) est interrompue.

Considérations supplémentaires :

  • Toutes les fonctions différées s'exécuteront, qu'elles provoquent ou non des paniques. .
  • Une panique au sein d'une fonction différée "enveloppera" la panique existante plutôt que de "l'écraser". Cependant, recovery() ne peut récupérer que la valeur transmise à la panique() la plus récente.
  • Il est possible de récupérer et de gérer les valeurs transmises à plusieurs paniques en imbriquant des fonctions différées avec recovery().

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!

Déclaration:
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