Maison > développement back-end > Golang > le corps du texte

Une fonction d'appelant peut-elle se remettre d'une panique d'un enfant Goroutine ?

Susan Sarandon
Libérer: 2024-11-04 08:21:30
original
702 Les gens l'ont consulté

Can a Caller Function Recover from a Child Goroutine Panic?

Récupération de la fonction de l'appelant suite aux paniques goroutines des enfants

Contrairement à la croyance populaire, la panique d'une goroutine ne met pas nécessairement fin à l'ensemble du programme. Cette idée fausse vient de l’hypothèse selon laquelle les fonctions de récupération différée chez l’appelant géreront la panique. Cependant, ce n'est pas le cas si l'appelant termine avant que la panique ne se produise dans la goroutine.

Considérons l'exemple suivant :

<code class="go">func fun1() {
    fmt.Println("fun1 started")
    defer func() {
        if err := recover(); err != nil {
            fmt.Println("recover in func1")
        }
    }()

    go fun2()

    time.Sleep(10 * time.Second) // wait for the boom!
    fmt.Println("fun1 ended")
}

func fun2() {
    fmt.Println("fun2 started")

    time.Sleep(5 * time.Second)
    panic("fun2 booom!")

    fmt.Println("fun2 ended")
}</code>
Copier après la connexion

Malgré la fonction de l'appelant (fun1) qui termine l'exécution, la le programme se termine toujours si fun2 panique. Cela se produit parce que la spécification Go définit que lorsqu'une panique se produit dans une goroutine :

  • L'exécution de cette goroutine se termine.
  • Les fonctions différées appelées par cette goroutine s'exécutent.
  • Les fonctions différées de son appelant s'exécutent.

Dans ce cas, fun2 est la fonction de niveau supérieur dans la goroutine, et elle ne se remet pas de la panique. Par conséquent, le programme se termine.

Le point clé est que :

Une goroutine ne peut pas se remettre d'une panique qui se produit dans une autre goroutine.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!