Программа сначала вызовет печать hello, затем при раскрутке panic выполнит defer и напечатает world. После этого необработанная panic завершит программу с диагностикой error.
Какой вывод получит консоль в примере №38
Программа сначала вызовет печать hello, затем при раскрутке panic выполнит defer и напечатает world. После этого необработанная panic завершит программу с диагностикой error.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Какой текст будет выведен после запуска следующей программы
import "fmt"
func main() {
defer fmt.Println("world")
fmt.Println("hello")
panic("error")
}
Ответ
Программа сначала вызовет печать hello, затем при раскрутке panic выполнит defer и напечатает world. После этого необработанная panic завершит программу с диагностикой error.
Defer исполняется при выходе из функции, в том числе из-за panic. Он не подавляет ошибку сам по себе: для этого нужен recover в подходящей отложенной функции. Диагностика runtime обычно идёт в stderr, обычные строки — в stdout, поэтому их визуальное объединение внешним сборщиком может отличаться от порядка вызовов.