Ошибки / Panic

Что такое паника?

Паника в программировании на Go обозначает серьезную ошибку, которая обычно приводит к немедленному завершению программы. Паника вызывает немедленное прекращение выполнения функции и начинает раскрутку стека Вы можете использовать функции defer и recover для перехвата и обработки паники.

Что используется для обработки паники / Куда нужно помещать recover??

В Go для обработки паники используются функции defer и recover:

  • Defer: Функция defer в Go позволяет отложить выполнение функции до того, как окружающая функция завершит свое выполнение. Это полезно для обработки ошибок и очистки ресурсов.
  • Recover: Функция recover используется для перехвата и обработки паник. Она должна вызываться внутри отложенной функции.
1
2
3
4
5
6
7
8
func someFunction() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered from", r)
}
}()
// Код, который может вызвать панику
}

Какая парадигма в Golang с точки зрения обработки исключений и ошибок?

  • Явная обработка ошибок: В Go ошибки считаются обычной частью работы программы и должны быть явно обработаны. Если функция может вызвать ошибку, она обычно возвращает значение ошибки в качестве одного из своих возвращаемых значений.

  • Нет исключений: В отличие от некоторых других языков, в Go нет встроенной поддержки исключений. Вместо этого функции возвращают ошибки, которые затем проверяются и обрабатываются.

  • Panic и recover: Go предоставляет функции panic и recover для обработки серьезных ошибок, которые обычно приводят к завершению программы. Однако эти функции обычно используются только в случае критических ошибок, и их использование для обычной обработки ошибок не рекомендуется.

  • Defer: Go также предоставляет ключевое слово defer, которое позволяет отложить выполнение функции до того, как окружающая функция завершит свое выполнение. Это полезно для обработки ошибок и очистки ресурсов.

Какие есть функции для оборачивания и сравнения ошибок?

В Go есть несколько функций, которые можно использовать для оборачивания и сравнения ошибок:

Оборачивание ошибок:

  • fmt.Errorf: Эта функция используется для создания новой ошибки, которая включает в себя сообщение об ошибке и другую ошибку в качестве причины. Начиная с Go 1.13, fmt.Errorf поддерживает оборачивание ошибок с помощью нового модификатора формата %w.

  • Сравнение ошибок:

    • errors.Is: Эта функция используется для проверки, является ли одна ошибка другой ошибкой. Она выполняет проверку на равенство ошибок и учитывает обернутые ошибки.
    • errors.As: Эта функция используется для проверки, является ли ошибка или обернутая ошибка определенным типом. Если это так, она присваивает эту ошибку указанному значению.
      Эти функции позволяют более эффективно работать с ошибками в Go, обеспечивая больше информации об ошибках и делая код более читаемым.

Для чего используются ошибки, а для чего паника?

В Go ошибки и паника используются для разных целей:

Ошибки:

  • Ошибки в Go обычно используются для обработки ожидаемых проблем, которые могут возникнуть во время выполнения программы.
  • Если функция может вызвать ошибку, она обычно возвращает значение ошибки в качестве одного из своих возвращаемых значений.
  • Эти ошибки затем проверяются и обрабатываются явно в коде.

Паника:

  • Паника в Go обычно используется для обработки неожиданных ошибок, которые не могут быть обработаны или которые должны привести к немедленному завершению программы.
  • Паника вызывает немедленное прекращение выполнения функции и начинает раскрутку стека.
  • Вы можете использовать функции defer и recover для перехвата и обработки паники.
  • Важно отметить, что хотя паника может казаться похожей на исключения в некоторых других языках, в Go предпочитают явную обработку ошибок, и паника обычно используется только в случае серьезных ошибок.

Вот вам и паника!

Поделиться