Maison > Article > développement back-end > Comment les paniques se comportent-elles dans les fonctions différées en 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!