Останов программы в Go
Программу можно остановить сразу, передав
короткое сообщение. Для этого служит встроенная
команда panic: она принимает значение,
обычно строку, которое попадет в трассировку
при необработанном останове.
После такого вызова текущая функция больше не идет вперед. Размотка стека поднимается к вызывающим функциям, пока кто-то не перехватит останов или процесс не закончится.
Поставим останов между двумя печатями в
main:
fmt.Println("before")
panic("boom")
fmt.Println("after")
На экране только "before". Строка
"after" не выполняется: управление
из функции уже ушло. Сообщение "boom"
появится в выводе, если останов никто не
поймает.
Тот же смысл виден, когда останов поднимается из вложенного вызова:
package main
import "fmt"
func inner() {
panic("fail")
}
func main() {
fmt.Println("start")
inner()
fmt.Println("end")
}
Дан следующий код:
fmt.Println("one")
panic("stop")
fmt.Println("two")
Скажите, какие строки появятся на экране.
Дана функция:
func mark() {
fmt.Println("mark")
}
Вызовите mark из main, затем
остановите программу с текстом "done"
и еще раз выведите "tail".
Скажите, выполнится ли код в main
сразу после вызова функции, внутри которой
сработал останов без перехвата.