Выбор ответа Junior Ошибки, defer, panic и recover спрашивают часто обновлено
errors.Is и обёрнутая ошибка
Вопрос
Что выведет код?
var ErrNotFound = errors.New("not found")
err := fmt.Errorf("get user 7: %w", ErrNotFound)
fmt.Println(err == ErrNotFound, errors.Is(err, ErrNotFound))
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: false true. fmt.Errorf с %w создаёт новую ошибку, которая оборачивает ErrNotFound.
Варианты ответа
true truefalse falsefalse trueправильный ответtrue false
Разбор
fmt.Errorf с %w создаёт новую ошибку, которая оборачивает ErrNotFound. Прямое сравнение == сравнивает с внешней ошибкой: false. errors.Is идёт по цепочке Unwrap и находит sentinel: true. Поэтому обёрнутые ошибки проверяют только через errors.Is.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.