РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
494 of 1593 menu

Функция errors.Unwrap

Функция errors.Unwrap извлекает следующую ошибку из цепочки вложенных ошибок. Она принимает один параметр - ошибку err, которая может содержать внутри себя другую ошибку. Функция возвращает внутреннюю ошибку, если она существует, и nil, если ошибка не содержит вложенной ошибки или сама равна nil. Эта функция особенно полезна при работе с цепочками ошибок, созданными с помощью оператора %w в fmt.Errorf или с помощью пользовательских типов, реализующих интерфейс Unwrapper.

Синтаксис

errors.Unwrap(err)

Пример

Давайте создадим цепочку из двух ошибок и извлечем внутреннюю ошибку с помощью errors.Unwrap:

package main import ( "errors" "fmt" ) func main() { innerErr := errors.New("inner error") outerErr := fmt.Errorf("outer error: %w", innerErr) unwrappedErr := errors.Unwrap(outerErr) fmt.Println(unwrappedErr) }

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

"inner error"

Пример

Давайте проверим, что функция возвращает nil, если ошибка не содержит вложенной ошибки:

package main import ( "errors" "fmt" ) func main() { err := errors.New("simple error") unwrappedErr := errors.Unwrap(err) fmt.Println(unwrappedErr) }

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

<nil>

Пример

Давайте создадим пользовательский тип ошибки, реализующий метод Unwrap, и проверим работу errors.Unwrap с ним:

package main import ( "errors" "fmt" ) type customError struct { msg string err error } func (e *customError) Error() string { return e.msg } func (e *customError) Unwrap() error { return e.err } func main() { innerErr := errors.New("inner error") outerErr := &customError{ msg: "custom error", err: innerErr, } unwrappedErr := errors.Unwrap(outerErr) fmt.Println(unwrappedErr) }

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

"inner error"

Смотрите также

  • функцию errors.Is,
    которая проверяет, содержит ли цепочка ошибок целевую ошибку
  • функцию errors.As,
    которая находит первую ошибку в цепочке, соответствующую целевому типу
  • функцию errors.Join,
    которая объединяет несколько ошибок в одну
  • конструкцию %w,
    которая позволяет вложить одну ошибку в другую при форматировании
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить