Sobes.tech
Middle — Middle+

Vysvetlite mechanizmus obnovenia systému po chybe v kontexte použitia Recover.

sobes.tech AI

Odpoveď od AI

V jazyku Go se mechanizmus recover používa na zachytenie panic a obnovenie normálneho behu programu. To umožňuje systému, po chybe, nezastaviť sa náhle, ale spracovať chybu a pokračovať v práci.

Hlavná myšlienka:

  • Keď dôjde k panic, vykonávanie funkcií sa preruší a začne sa "rozbalovanie" zásobníka.
  • Ak v jednej z volaných funkcií je odložené (defer) volanie, ktoré volá recover(), zachytí panic a vráti hodnotu chyby.
  • Následne môže program chybu spracovať a pokračovať v vykonávaní.

Príklad:

func safeDivide(a, b int) int {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Obnova po panike:", r)
        }
    }()
    return a / b // ak b == 0, dôjde k panic
}

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

Týmto spôsobom recover pomáha urobiť systém odolnejším voči neočakávaným chybám a zabrániť náhlemu ukončeniu.