Sobes.tech
Middle — Middle+

Explica mecanismul de recuperare a sistemului după o defecțiune în contextul utilizării Recover.

sobes.tech AI

Răspuns de la AI

În Go, mecanismul recover este utilizat pentru a captura panicile (panic) și pentru a restabili execuția normală a programului. Acest lucru permite sistemului, după o eroare, să nu se încheie brusc, ci să gestioneze eroarea și să continue funcționarea.

Ideea principală:

  • Când apare o panică, execuția funcțiilor este întreruptă și începe "derularea" stivei.
  • Dacă în una dintre funcțiile apelate există un apel întârziat (defer) care invocă recover(), acesta capturează panică și returnează valoarea erorii.
  • După aceea, programul poate gestiona eroarea și poate continua execuția.

Exemplu:

func safeDivide(a, b int) int {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recuperare după panică:", r)
        }
    }()
    return a / b // dacă b == 0, va apărea panic
}

func main() {
    fmt.Println(safeDivide(10, 2)) // 5
    fmt.Println(safeDivide(10, 0)) // Recuperare după panic: runtime error: integer divide by zero
}

Astfel, recover ajută la crearea unui sistem rezistent la erori neașteptate, prevenind închiderea bruscă a programului.