Sobes.tech
Junior — Middle

Vysvětlete mechanismus vzájemného působení funkcí panic, defer a recover v jazyce Go.

sobes.tech AI

Odpověď od AI

V jazyce Go jsou funkce panic, defer a recover spojeny s ošetřením chyb a výjimečných situací.

  • panic — způsobí náhlé ukončení aktuální funkce a spustí proces "paniky", který se šíří po zásobníku volání a volá odložené funkce defer.
  • defer — odkládá vykonání funkce do doby opuštění aktuální funkce, což umožňuje provádět úklid nebo zpracování po panic.
  • recover — umožňuje "chytit" paniku uvnitř odložené funkce a zabránit ukončení programu.

Příklad:

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

    fmt.Println("Před panic")
    panic("něco se pokazilo")
    fmt.Println("Toto se nespustí")
}

Zde panic vyvolá chybu, defer s recover ji zachytí a program pokračuje bez pádu.