Что выведет код Middle Ошибки, defer, panic и recover обновлено
Что выведет Go: recover превращает панику в ошибку
Вопрос
Что выведет программа? Go 1.23, в go.mod указано go 1.23. Каждую строку вывода пишите с новой строки.
package main
import "fmt"
func safeDiv(a, b int) (res int, err error) {
defer func() {
if r := recover(); r != nil {
err = fmt.Errorf("recovered: %v", r)
}
}()
res = a / b
return res, nil
}
func main() {
fmt.Println(safeDiv(6, 3))
fmt.Println(safeDiv(1, 0))
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: 2 <nil>, 0 recovered: runtime error: integer divide by zero. Первый вызов проходит без паники.
Что выведет
2 <nil>
0 recovered: runtime error: integer divide by zero
Разбор
Первый вызов проходит без паники. Во втором деление на переменную, равную нулю, вызывает панику рантайма. Отложенная функция ловит её recover и записывает ошибку в именованный результат, а res остаётся нулевым. Функция возвращается нормально.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Что выведет Go: defer при панике и повторная паника
Следующий вопрос
Код-ревью Go: sentinel-ошибки, typed nil и panic