Maison >développement back-end >Golang >Comment la fonction « recover() » de Go peut-elle maintenir plusieurs Goroutines en cours d'exécution après une panique ?

Comment la fonction « recover() » de Go peut-elle maintenir plusieurs Goroutines en cours d'exécution après une panique ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-26 08:24:09809parcourir

How Can Go's `recover()` Function Keep Multiple Goroutines Running After a Panic?

Maintenir plusieurs goroutines en cours d'exécution en cas de crash

Lorsque vous travaillez avec plusieurs goroutines dans Go, il est essentiel d'envisager des scénarios dans lesquels une goroutine peut planter ou paniquer, affectant potentiellement l'ensemble du programme. Pour éviter cela, le programme doit gérer ces situations avec élégance, permettant aux autres goroutines de continuer à s'exécuter.

Utilisation de la fonction de récupération

Go fournit la récupération intégrée ( ) fonction qui permet de gérer les paniques et de s'en remettre. Pour utiliser cette fonction, il faut qu'elle soit appelée au sein d'une fonction différée. De cette façon, si une panique se produit, elle est capturée et le programme reprend son exécution une fois la fonction différée terminée.

Voici un exemple de la façon dont recovery() peut être utilisé :

func doPanic() {
    fmt.Println("About to panic")
    panic("test")
}

func protect(f func()) {
    defer func() {
        if err := recover(); err != nil {
            fmt.Printf("Recovered: %v", err)
        }
    }()

    f()
}

func main() {
    go protect(doPanic)

    for {
        time.Sleep(time.Second)
        fmt.Println("Tick")
    }
}

Explication

  • doPanic est une fonction qui délibérément paniques.
  • protect est une fonction d'assistance qui enveloppe une fonction comme une goroutine, piégeant toutes les paniques à l'aide d'une fonction différée.
  • En principal, Protect(doPanic) est lancé en tant que goroutine pour démontrer la panique. récupération.

Sortie

Lorsque ce code est exécuté, il affichera :

About to panic
Recovered: test
Tick
Tick
Tick
...

Cela illustre que même si doPanic a provoqué une panique, le programme a continué à s'exécuter en raison de l'appel recovery(), permettant à l'autre goroutine de continuer à s'exécuter indéfiniment.

Il est important de noter que même si recovery() permet au programme de continuer à s'exécuter, cela n'empêche pas la panique sous-jacente de se produire. Par conséquent, il est toujours essentiel d’identifier et de traiter la cause profonde de la panique pour éviter qu’elle ne se reproduise à l’avenir.

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