Maison > développement back-end > Golang > 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
Libérer: 2024-11-02 08:28:29
original
686 Les gens l'ont consulté

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>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">defer func (){
    panic(2)
}()
panic(1)
Copier après la connexion

}

func main(){

defer func(){
    x:=recover()
    println(x.(int));
}()
sub()
Copier après la connexion

}

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>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">defer func() {
    fmt.Println("Checkpoint 1")
    panic(1)
}()
defer func() {
    fmt.Println("Checkpoint 2")
    panic(2)
}()
panic(999)
Copier après la connexion

}

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>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">recover()
fmt.Println("Checkpoint 1")
panic(1)
Copier après la connexion

}()
defer func() {

recover()
fmt.Println("Checkpoint 2")
panic(2)
Copier après la connexion

}()

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!

source:php.cn
Article précédent:Pouvez-vous paniquer à l'intérieur d'une fonction de report pendant une panique existante en Go ? Article suivant:Comment corriger l'erreur « L'objet d'importation est attendu » dans Golang 1.4.2 ?
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
Derniers numéros
Rubriques connexes
Plus>
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal