В данном коде функция bbb вызывает panic("aaaa"), но перед этим определён defer с анонимной функцией, которая вызывает recover() и обрабатывает панику, выводя сообщение:
// Вопрос 2. Что выведет на экран
В данном коде функция bbb вызывает panic("aaaa"), но перед этим определён defer с анонимной функцией, которая вызывает recover() и обрабатывает панику, выводя сообщение:
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
// Вопрос 2. Что выведет на экран
package main
import "fmt"
func bbb() { defer func(){ if r := recover(); r != nil{ fmt.Println("Паника обработана 1 ", r) } }()
panic("aaaa")
}
func main() {
defer func(){
if r := recover(); r != nil{
fmt.Println("Паника обработана 2 ", r)
}
}()
bbb()
}
Ответ
В данном коде функция bbb вызывает panic("aaaa"), но перед этим определён defer с анонимной функцией, которая вызывает recover() и обрабатывает панику, выводя сообщение:
Паника обработана 1 aaaa
Поскольку паника обработана внутри bbb, она не распространяется дальше в main, и второй defer с recover в main не срабатывает.
Итоговый вывод на экран будет:
Паника обработана 1 aaaa
Если бы recover в bbb не был, тогда паника дошла бы до main и там была бы обработана с выводом "Паника обработана 2 aaaa".