Sobes.tech
Назад к вопросам
Junior — Middle
76

Можно ли ловить и обрабатывать паники внутри вызова defer в Go?

Ответ от нейросети

sobes.tech AI

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

Пример:

func safeCall() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Паника поймана и обработана:", r)
        }
    }()
    panic("что-то пошло не так")
}

Здесь recover() вызывается внутри функции, отложенной через defer, и позволяет поймать панику, возникшую в safeCall. Таким образом, паники нельзя "ловить" непосредственно в defer, но можно обработать их внутри отложенной функции с recover().