Как проверить тип ошибки?

Middle
268 просмотров
AFK Offer AI

Два способа. errors.As — для typed errors: var pe *os.PathError; if errors.As(err, &pe) { fmt.Println(pe.Path) }. Проходит по цепочке Unwrap, находит нужный тип. Type switch — для нескольких типов: switch e := err.(type) { case *ValidationError: ... case *NotFoundError: ... }. Но type switch не ходит по цепочке! Поэтому errors.As предпочтительнее для wrapped errors. Не используй fmt.Sprintf и strings.Contains для проверки ошибок — это хрупко и ломается при рефакторинге.

Следующий вопрос

Задача: что выведет этот код? goroutine захватывает переменную цикла