Sobes.tech
Junior — Middle

Може ли да улавяте и обработвате паники вътре в извикване defer в Go?

sobes.tech AI

Отговор от AI

В Go можете да използвате defer за обработка на паники, но самият извикване на defer не улавя паника; трябва да я уловите вътре във функцията, отложена чрез defer, с помощта на recover().

Пример:

func safeCall() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Улавяне и обработка на паника:", r)
        }
    }()
    panic("нещо се обърка")
}

Тук recover() се извиква вътре във функцията, отложена чрез defer, и позволява да се улови паниката, възникнала в safeCall. По този начин, паниките не могат да бъдат "уловени" директно в defer, но могат да бъдат обработени вътре във функцията с recover().