English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Базовый курс Golang

Контрольные инструкции в Golang

Функции и методы в Golang

Структуры в Golang

Срезы и массивы в Golang

Строки (String) в Golang

Указатели в Golang

Интерфейсы в Golang

Конкурентоспособность в Golang

Исключения (Error) в Golang

Другие элементы Golang

Panic в Go

Panic - это механизм, который мы используем для обработки ошибок. Экстренные ситуации могут быть использованы для прерывания выполнения функции. Когда функция вызывает panic, ее выполнение останавливается, и управление передается связанным отложенным функциям.

Кalledер этого функции также будет завершен, а отложенные функции вызовут (если они есть). Этот процесс продолжается до завершения программы. Теперь сообщайте о возникших ошибках.

Этот последовательность завершения称为 panic и может быть контролироваться内置 функцией recover.

Пример паники 1:

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

Пример паники 2

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.