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().