|
Go umožňuje zotavit se (recover) z paniky pomocí
zabudované funkce recover. recover dokáže zabránit
tomu, aby panic ukončila program, a nechat ho místo
toho pokračovat v provádění.
|
|
|
Příklad, kde se to hodí: server by nechtěl spadnout,
pokud v jednom z klientských spojení dojde ke kritické
chybě. Místo toho by chtěl toto spojení zavřít a dál
obsluhovat ostatní klienty. Přesně tohle ostatně ve
výchozím stavu dělá net/http v Go pro HTTP servery.
|
|
|
|

|
|
|
|
|
Tato funkce vyvolá paniku.
|
func mayPanic() {
panic("problém")
}
|
|
recover musí být zavolán uvnitř odložené funkce.
Když obklopující funkce vyvolá paniku, odložená
funkce se aktivuje a volání recover v ní paniku
zachytí.
|
|
|
Návratová hodnota recover je chyba předaná
při volání panic.
|
defer func() {
if r := recover(); r != nil {
|
|
|
fmt.Println("Zotaveno. Chyba:\n", r)
}
}()
|
|
|
|
|
Tento kód se neprovede, protože mayPanic vyvolá
paniku. Provádění main se zastaví v místě paniky
a pokračuje v odložené uzávěře.
|
fmt.Println("Po mayPanic()")
}
|