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

Функция errors.Is

Функция errors.Is проверяет, содержится ли в цепочке ошибок (возвращаемой с помощью обертывания) заданная целевая ошибка. Она возвращает true, если ошибка или какая-либо из обернутых в ней ошибок равна целевой, и false в противном случае. Первым параметром функция принимает исходную ошибку (обычно это результат выполнения функции), вторым - целевую ошибку для сравнения.

Синтаксис

errors.Is(err, target)

Пример

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

package main import ( "errors" "fmt" ) func main() { err := errors.New("error occurred") target := errors.New("error occurred") res := errors.Is(err, target) fmt.Println(res) }

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

false

Несмотря на одинаковый текст ошибок, они являются разными экземплярами, поэтому функция возвращает false.

Пример

Правильный способ использования errors.Is - это сравнение с заранее объявленной переменной (sentinel error):

package main import ( "errors" "fmt" ) var ErrNotFound = errors.New("not found") func main() { err := ErrNotFound res := errors.Is(err, ErrNotFound) fmt.Println(res) }

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

true

Пример

Рассмотрим работу errors.Is с обернутой ошибкой. Функция будет проходить по цепочке и проверять каждую ошибку на соответствие целевой:

package main import ( "errors" "fmt" ) var ErrPermission = errors.New("permission denied") func main() { err := fmt.Errorf("operation failed: %w", ErrPermission) res := errors.Is(err, ErrPermission) fmt.Println(res) }

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

true

Функция распаковывает обертку и находит целевую ошибку ErrPermission, поэтому возвращается true.

Пример

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

package main import ( "errors" "fmt" ) var ErrNotFound = errors.New("not found") var ErrTimeout = errors.New("timeout") func main() { err := fmt.Errorf("connection: %w", ErrTimeout) res := errors.Is(err, ErrNotFound) fmt.Println(res) }

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

false

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

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