Sobes.tech
Junior — Middle

Vysvetlite mechanizmus vzájomného pôsobenia funkcií panic, defer a recover v jazyku Go.

sobes.tech AI

Odpoveď od AI

V jazyku Go sú funkcie panic, defer a recover spojené s spracovaním chýb a výnimočných situácií.

  • panic — spôsobí náhly ukončenie aktuálnej funkcie a spustí proces "paniky", ktorý sa šíri po zásobníku volaní a volá odložené funkcie defer.
  • defer — odkladá vykonanie funkcie do doby opustenia aktuálnej funkcie, čo umožňuje vykonanie upratovania alebo spracovania po panic.
  • recover — umožňuje "chytiť" panic vo vnútri odloženej funkcie a zabrániť ukončeniu programu.

Príklad:

func priklad() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Obnovené z panic:", r)
        }
    }()

    fmt.Println("Pred panic")
    panic("niečo sa pokazilo")
    fmt.Println("Toto sa nespustí")
}

Tu panic spôsobí chybu, defer s recover ju zachytí a program pokračuje bez pádu.