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

Функция errors.As

Функция errors.As проверяет, является ли ошибка или любая из обернутых в ней ошибок (с помощью fmt.Errorf с директивой %w) ошибкой определенного типа. В первый параметр мы передаем ошибку для проверки, во второй параметр мы передаем указатель на переменную целевого типа, в которую будет сохранена найденная ошибка. Функция возвращает true, если ошибка найдена, и false в противном случае.

Синтаксис

errors.As(err, &target)

Пример

Давайте проверим, является ли ошибка типа *os.PathError:

package main import ( "errors" "fmt" "os" ) func main() { _, err := os.Open("nonexistent.txt") var pathErr *os.PathError if errors.As(err, &pathErr) { fmt.Println("Found path error:", pathErr.Path) } else { fmt.Println("Not a path error") } }

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

"Found path error: nonexistent.txt"

Пример

Давайте проверим, является ли ошибка типом *MyError после обертывания:

package main import ( "errors" "fmt" ) type MyError struct { Message string } func (e *MyError) Error() string { return e.Message } func main() { baseErr := &MyError{Message: "something went wrong"} wrappedErr := fmt.Errorf("wrapped error: %w", baseErr) var myErr *MyError if errors.As(wrappedErr, &myErr) { fmt.Println("Found MyError:", myErr.Message) } else { fmt.Println("MyError not found") } }

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

"Found MyError: something went wrong"

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

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