cpp

Функция panic(): генерация паники

Вместо возврата объекта ошибки в некоторых ситуациях генерируется паника. В этом случае, если не предусмотрена обработка паники, программа экстренно завершается и выводится сообщение об ошибке. При этом перед завершением программы вызываются функции, зарегистрированные инструкцией defer (см. листинг 10.17). Например, паника генерируется при делении на ноль или выходе за пределы массива или слайса:

arr := []int{1, 2}
// Код с ошибкой (оператор <= вместо <)
for i, c := 0, len(arr); i <= c; i++ {
   fmt.Println(arr[i])
}

Результат выполнения:

C:\book\test>go run main.go
1
2
panic: runtime error: index out of range [2] with length 2

goroutine 1 [running]:
main.main()
        C:/book/test/main.go:9 +0xac
exit status 2

Как видно из результата, перед текстом описания ошибки выводится слово panic.

Имеется возможность сгенерировать панику самим. Для этого предназначена глобальная функция panic(). Формат функции:

panic(v interface{})

Пример:

panic("Описание ошибки")
// panic: Описание ошибки

Помимо строки с описанием ошибки можно передать объект ошибки:

panic(fmt.Errorf("Описание ошибки"))
// panic: Описание ошибки

Вывести сообщение и сгенерировать панику позволяют следующие функции из пакета log:

  • Panic() — вызывает функцию Print(), а затем функцию panic(). Формат функции:
log.Panic(v ...interface{})

Пример:

// import "log"
log.Panic("Сообщение", 10, true)
// 2022/04/19 20:32:51 Сообщение10 true
// panic: Сообщение10 true
  • Panicln() — вызывает функцию Println(), а затем функцию panic(). Формат функции:
log.Panicln(v ...interface{})

Пример:

log.Panicln("Сообщение", 10, true)
// 2022/04/19 20:35:09 Сообщение 10 true
// panic: Сообщение 10 true
  • Panicf() — вызывает функцию Printf(), а затем функцию panic(). Формат функции:
log.Panicf(format string, v ...interface{})

Пример:

log.Panicf("%s %d %v", "Сообщение", 10, true)
// 2022/04/19 20:37:04 Сообщение 10 true
// panic: Сообщение 10 true

Перед сообщением по умолчанию выводится дата и время. Управлять этой технической информацией позволяет функция SetFlags(). Формат функции:

log.SetFlags(flag int)

Пример вывода даты, времени, пути к файлу и номера строки внутри файла:

log.SetFlags(log.Ldate | log.Ltime | log.Llongfile)
log.Panic("Сообщение")
// 2022/04/19 20:41:09 C:/book/test/main.go:12: Сообщение
// panic: Сообщение

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp