Sobes.tech
Middle — Middle+

Expliquez le mécanisme de récupération du système après une panne dans le contexte de l'utilisation de Recover.

sobes.tech IA

Réponse de l'IA

En Go, le mécanisme recover est utilisé pour intercepter les paniques (panic) et restaurer l'exécution normale du programme. Cela permet au système, après une erreur, de ne pas se terminer brutalement, mais de gérer l'erreur et de continuer à fonctionner.

Idée principale :

  • Lorsqu'une panique se produit, l'exécution des fonctions est interrompue et le déballage de la pile commence.
  • Si dans l'une des fonctions appelées il y a un appel différé (defer) qui invoque recover(), celle-ci intercepte la panique et renvoie la valeur de l'erreur.
  • Après cela, le programme peut gérer l'erreur et continuer l'exécution.

Exemple :

func safeDivide(a, b int) int {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Récupération après la panique :", r)
        }
    }()
    return a / b // si b == 0, panic
}

func main() {
    fmt.Println(safeDivide(10, 2)) // 5
    fmt.Println(safeDivide(10, 0)) // Récupération après la panique : runtime error: integer divide by zero
}

Ainsi, recover aide à rendre le système résilient face à des erreurs inattendues, évitant une terminaison brutale.