Sobes.tech
Junior — Middle

Qual è la necessità di usare la funzione recover all'interno di defer in Go?

sobes.tech AI

Risposta dell'AI

In Go, la funzione recover viene utilizzata per intercettare i panici (panic) ed evitare che il programma termini in modo anomalo. Tuttavia, recover funziona solo se viene chiamata all'interno di una funzione differita (defer).

L'uso di recover all'interno di defer permette di:

  • Gestire in modo sicuro un panico, ad esempio registrando l'errore o eseguendo operazioni di pulizia.
  • Continuare l'esecuzione del programma dopo un panico, se possibile.

Esempio:

func safeFunction() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recuperato da panic:", r)
        }
    }()
    // Codice che può causare panic
    panic("qualcosa è andato storto")
}

Se si chiama recover fuori da defer, non catturerà il panico e il programma terminerà in modo anomalo. Per questo motivo, recover deve sempre essere collocata all'interno di defer per una corretta gestione delle situazioni eccezionali.