English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Panic - это механизм, который мы используем для обработки ошибок. Экстренные ситуации могут быть использованы для прерывания выполнения функции. Когда функция вызывает panic, ее выполнение останавливается, и управление передается связанным отложенным функциям.
Кalledер этого функции также будет завершен, а отложенные функции вызовут (если они есть). Этот процесс продолжается до завершения программы. Теперь сообщайте о возникших ошибках.
Этот последовательность завершения称为 panic и может быть контролироваться内置 функцией recover.
package main import "os" func main() { panic("Обsituation ошибки") _, err := os.Open("/tmp/file") if err != nil { panic(err) } }
Вывод:
panic: Обsituation ошибки goroutine 1 [running]: main.main() /Users/pro/GoglandProjects/Panic/panic example1.go:6 +0x39
package main import "fmt" func main() { fmt.Println("Вызов x из main.") x() fmt.Println("Возвращение из x.") } func x() { defer func() { if r := recover(); r != nil { fmt.Println("Восстановлен в x", r) } }() fmt.Println("Выполнение x...") fmt.Println("Вызов y.") y(0) fmt.Println("Возвращение в нормальном режиме из y.") } func y(i int) { fmt.Println("Выполнение y....") if i > 2 { fmt.Println("Паника!") panic(fmt.Sprintf("%v", i)) } defer fmt.Println("Отложен в y", i) fmt.Println("Печать в y", i) y(i + 1) }
Вывод:
Вызов x из main. Выполнение x... Вызов y. Выполнение y.... Печать в y 0 Выполнение y.... Печать в y 1 Выполнение y.... Печать в y 2 Выполнение y.... Паника! Отложен в y 2 Отложен в y 1 Отложен в y 0 Восстановлен в x 3 Вернулся из x.