Sobes.tech
Middle — Middle+

Vysvětlete mechanismus obnovení systému po selhání v kontextu použití Recover.

sobes.tech AI

Odpověď od AI

V jazyce Go se mechanismus recover používá k zachycení panic a obnovení normálního běhu programu. To umožňuje systému po selhání nezastavit se náhle, ale zpracovat chybu a pokračovat v práci.

Hlavní myšlenka:

  • Při vzniku paniky je vykonávání funkcí přerušeno a začíná "rozbalování" zásobníku.
  • Pokud v jedné z volaných funkcí je odložené volání (defer), které volá recover(), zachytí paniku a vrátí hodnotu chyby.
  • Poté může program chybu zpracovat a pokračovat v provádění.

Příklad:

func safeDivide(a, b int) int {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Obnova po panice:", r)
        }
    }()
    return a / b // pokud b == 0, dojde k panic
}

func main() {
    fmt.Println(safeDivide(10, 2)) // 5
    fmt.Println(safeDivide(10, 0)) // Obnova po panice: runtime error: integer divide by zero
}

Tímto způsobem recover pomáhá udělat systém odolnější vůči neočekávaným chybám a zabránit náhlému ukončení.