Maison > développement back-end > Golang > Comment puis-je faire fonctionner mes Go Goroutines même après une panique ?

Comment puis-je faire fonctionner mes Go Goroutines même après une panique ?

Mary-Kate Olsen
Libérer: 2024-12-01 00:20:13
original
251 Les gens l'ont consulté

How Can I Keep My Go Goroutines Running Even After a Panic?

Maintenir les goroutines en marche malgré les crashs

Dans Go, les goroutines sont puissantes mais peuvent être sensibles aux plantages dus à des erreurs ou à des paniques. Pour garantir que l'échec d'une goroutine n'affecte pas les autres, les développeurs peuvent se demander s'il existe un moyen de maintenir les goroutines non affectées en fonctionnement.

Pour se remettre d'une panique, la fonction intégrée recovery() est utilisée. Il permet d'attraper une panique au sein d'une fonction différée. La fonction d'assistance suivante, Protect(), utilise ce mécanisme pour lancer des goroutines avec récupération de panique :

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

    f()
}
Copier après la connexion

Pour utiliser cette protection, transmettez simplement votre fonction comme argument à Protect(). En enveloppant cet appel dans une boucle for qui imprime continuellement « tick », nous pouvons démontrer comment la goroutine protégée par Protect() continuera à fonctionner même si une panique se produit dans une autre goroutine :

func main() {
    go protect(doPanic)

    for {
        time.Sleep(time.Second)
        fmt.Println("tick")
    }
}
Copier après la connexion

Cette application de test affichera :

2021/03/04 14:12:31 about to panic
2021/03/04 14:12:31 Recovered: test
tick
tick
tick
...
Copier après la connexion

Comme vous pouvez le voir, la panique dans la fonction doPanic est récupérée et gérée, tandis que la goroutine protégée continue de s'exécuter et d'imprimer "tick". Cette approche isole efficacement les goroutines des paniques, garantissant qu'un seul échec ne se propage pas et ne plante pas l'ensemble de l'application.

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 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