Sobes.tech
Junior — Middle

Je možné zachytiť a spracovať paniky vnútri volania defer v Go?

sobes.tech AI

Odpoveď od AI

V jazyku Go môžete použiť defer na spracovanie paník, ale samotný volanie defer nezachytí paniku; je potrebné ju zachytiť vo vnútri funkcie odložené pomocou recover().

Príklad:

func safeCall() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Chytená a spracovaná panika:", r)
        }
    }()
    panic("niečo sa pokazilo")
}

Tu je recover() volané vo vnútri odloženej funkcie a umožňuje zachytiť paniku, ktorá vznikla v safeCall. Týmto spôsobom nie je možné priamo v defer "chytiť" paniku, ale je možné ju spracovať vo vnútri odloženej funkcie s recover().