Maison  >  Article  >  développement back-end  >  Comment les paniques se comportent-elles dans les fonctions différées en Go ?

Comment les paniques se comportent-elles dans les fonctions différées en Go ?

DDD
DDDoriginal
2024-11-02 08:28:29558parcourir

How Do Panics Behave in Deferred Functions in Go?

Gestion de la panique dans les fonctions différées dans Go

La gestion de la panique dans Go est un aspect crucial de la gestion des erreurs. Bien qu'il soit généralement déconseillé de paniquer à cause d'un destructeur en C , il est sûr et acceptable de paniquer à partir d'une fonction différée dans Go.

Propagation de la panique et écrasement

Dans le Exemple de code fourni :

<br>func sub(){</p>
<pre class="brush:php;toolbar:false">defer func (){
    panic(2)
}()
panic(1)

}

func main(){

defer func(){
    x:=recover()
    println(x.(int));
}()
sub()

}

La deuxième panique(2) n'écrase pas la première panique(1). Au lieu de cela, les deux paniques sont propagées à la fonction principale, où la fonction de récupération différée récupère et imprime la valeur de la première panique(1).

Fin de panique et récupération

Lorsqu'une panique survient au sein d'une fonction différée, la séquence de panique continue. Cependant, si la fonction différée récupère de la panique (avec la fonction recovery()), la séquence de panique s'arrête. Cela garantit que les paniques ne mettent pas fin au programme Go prématurément.

Exemple : paniques et récupérations différées multiples

Comme le démontre l'exemple suivant :

<br>func main() {</p>
<pre class="brush:php;toolbar:false">defer func() {
    fmt.Println("Checkpoint 1")
    panic(1)
}()
defer func() {
    fmt.Println("Checkpoint 2")
    panic(2)
}()
panic(999)

}

Même si toutes les fonctions différées exécutent panic(), la récupération est possible à partir de toute fonction différée, comme en témoigne l'exemple modifié suivant :

<br>defer func() {</p>
<pre class="brush:php;toolbar:false">recover()
fmt.Println("Checkpoint 1")
panic(1)

}()
defer func() {

recover()
fmt.Println("Checkpoint 2")
panic(2)

}()

Dans ce cas, la séquence de panique finale comprend des informations sur toutes les valeurs de panique et indique où la récupération s'est produite.

Conclusion

La gestion de la panique dans les fonctions différées dans Go offre de la flexibilité et permet la poursuite des séquences de panique. La capacité de récupération après une panique différée garantit que les paniques ne mettent pas fin prématurément au programme. Les programmeurs Go peuvent exploiter ce mécanisme pour mettre en œuvre des stratégies robustes de gestion des erreurs.

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