Maison > développement back-end > Golang > Comment puis-je gérer et signaler gracieusement les paniques des Goroutines dans Go ?

Comment puis-je gérer et signaler gracieusement les paniques des Goroutines dans Go ?

Linda Hamilton
Libérer: 2024-12-21 04:55:12
original
355 Les gens l'ont consulté

How Can I Gracefully Handle and Report Panics from Goroutines in Go?

Récupération de panique générique dans les programmes Go

Lorsque des routines concurrentes dans un programme Go rencontrent des erreurs critiques qui entraînent des paniques, il devient crucial de procéder gracieusement gérer et signaler ces exceptions à un service de reporting externe comme Sentry ou Raygun. Cependant, capturer les paniques des routines exécutées dans des goroutines distinctes pose un défi.

Le problème des paniques des goroutines

Une goroutine ne peut pas se remettre d'une panique qui se produit dans une autre goroutine. Cette limitation pose un problème pour capturer et signaler les paniques des routines simultanées.

Techniques de récupération idiomatiques

Pour récupérer des paniques dans les routines simultanées, il est nécessaire d'injecter du code dans le Fonction de goroutine qui vérifie les valeurs récupérées. La manière standard d'y parvenir consiste à utiliser une fonction différée qui appelle recovery().

go func() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Caught:", r)
        }
    }()

    panic("catch me")
}()
Copier après la connexion

Cette approche garantit que toute panique au sein de la goroutine sera détectée par la fonction différée et enregistrée en conséquence.

Fonction Wrapper pour une récupération simplifiée

Pour simplifier le processus de récupération, vous pouvez créer une fonction wrapper qui encapsule la logique de récupération :

func wrap(f func()) {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Caught:", r)
        }
    }()

    f()
}
Copier après la connexion

Maintenant, vous pouvez utiliser la fonction wrap() pour protéger n'importe quelle fonction goroutine des paniques :

go wrap(func() {
    panic("catch me")
})
Copier après la connexion

Remarque :Le La fonction wrap() vous permet d'exécuter des fonctions arbitraires sans créer explicitement de nouvelles goroutines, tout en garantissant une récupération de panique.

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