// Вопрос 2. Что выведет на экран

В данном коде функция bbb вызывает panic("aaaa"), но перед этим определён defer с анонимной функцией, которая вызывает recover() и обрабатывает панику, выводя сообщение:

Короткий ответ

Что ответить на собеседовании

В данном коде функция 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".

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку