Sobes.tech
Middle — Middle+

Spiega il meccanismo di ripristino del sistema dopo un guasto nel contesto dell'uso di Recover.

sobes.tech AI

Risposta dell'AI

In Go, il meccanismo recover viene utilizzato per intercettare le paniche (panic) e ripristinare l'esecuzione normale del programma. Questo permette al sistema, dopo un errore, di non terminare bruscamente, ma di gestire l'errore e continuare a funzionare.

Idea principale:

  • Quando si verifica una panica, l'esecuzione delle funzioni viene interrotta e inizia lo "srotolamento" dello stack.
  • Se in una delle funzioni chiamate c'è una chiamata differita (defer) che invoca recover(), questa intercetta la panica e restituisce il valore dell'errore.
  • Dopo di che, il programma può gestire l'errore e continuare l'esecuzione.

Esempio:

func safeDivide(a, b int) int {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recupero dopo la panica:", r)
        }
    }()
    return a / b // se b == 0, panico
}

func main() {
    fmt.Println(safeDivide(10, 2)) // 5
    fmt.Println(safeDivide(10, 0)) // Recupero dopo la panica: runtime error: integer divide by zero
}

In questo modo, recover aiuta a rendere il sistema resistente a errori imprevisti, evitando che si termini in modo improvviso.