Выбор ответа Middle Ошибки, defer, panic и recover спрашивают часто обновлено
Когда errors.As, а когда errors.Is
Вопрос
Нужно достать путь файла из ошибки *fs.PathError, лежащей где-то в цепочке. Что использовать?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: var pe fs.PathError; errors.As(err, &pe). errors.As ищет в цепочке первую ошибку, которую можно присвоить в целевую переменную, и заполняет её. errors.Is проверяет равенство конкретному значению, а не тип.
Варианты ответа
var pe *fs.PathError; errors.As(err, &pe)правильный ответerrors.Is(err, &fs.PathError{})с указателемpe := err.(*fs.PathError)errors.Unwrap(err).(*fs.PathError)
Разбор
errors.As ищет в цепочке первую ошибку, которую можно присвоить в целевую переменную, и заполняет её. errors.Is проверяет равенство конкретному значению, а не тип. Прямое приведение err.(*fs.PathError) смотрит только на верхнюю ошибку и упадёт, если она обёрнута. Один Unwrap снимает только один слой и тоже может не дойти.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.