Что выведет код Senior Ошибки, defer, panic и recover обновлено
Что выведет Go: defer при панике и повторная паника
Вопрос
Что выведет программа? Go 1.23, в go.mod указано go 1.23. Каждую строку вывода пишите с новой строки.
package main
import "fmt"
func main() {
defer func() {
fmt.Println("recovered:", recover())
}()
defer func() {
defer func() {
fmt.Println("inner:", recover())
}()
panic("second")
}()
fmt.Println("start")
panic("first")
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: start, inner: second, recovered: first. Паника first запускает отложенные функции в обратном порядке.
Что выведет
start
inner: second
recovered: first
Разбор
Паника first запускает отложенные функции в обратном порядке. Вторая отложенная функция паникует second, и её собственный defer перехватывает именно эту новую панику. После этого раскрутка исходной паники first продолжается, и первый defer main ловит first.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Что выведет Go: defer и именованные результаты
Следующий вопрос
Что выведет Go: recover превращает панику в ошибку