Я пытаюсь определить, является ли os.PathError
результатом EINVAL
или ENOENT
.Как правильно сделать это определение?
res, err := os.Readlink(fpath)
if err, ok := err.(*os.PathError); ok {
if err.Err == os.ErrInvalid {
// This path here. What's the correct check?
return fpath
}
log.Printf("ResolveLinks error: %s", err)
return ""
}
log.Printf("Resolved: %s to %s", fpath, res)
return res
Если fpath
указывает на обычный файл вместо символической ссылки, readlink должна выдать EINVAL
, но моя проверка err.Err == os.ErrInvalid
завершается неудачно, и регистрируется следующее:
2019/03/28 12:04:42 ResolveLinks error: readlink foo: invalid argument
Я должен распаковать PathError, но что тогда?Сравните строку ошибки?
Я заметил, что модуль os имеет определенные функции для соответствия типам ошибок, например os.IsNotExist
, но я не вижу ни одной для всех возможных кодов ошибок.