登录
首页 >  Golang >  Go问答

正确的方式来提取 PathError 中的 errno 值

来源:stackoverflow

时间:2024-03-15 11:45:28 106浏览 收藏

知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个Golang开发实战,手把手教大家学习《正确的方式来提取 PathError 中的 errno 值》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!

问题内容

我正在尝试确定 os.patherror 是否由 einvalenoent 引起。我如何正确做出决定?

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错误:readlink foo:无效参数

我应该解压 patherror,但是然后呢?比较错误字符串?

我注意到 os 模块具有某些匹配错误类型的函数,例如 os.isnotexist,但我没有看到所有可能的错误代码的函数。


解决方案


err.err 的类型为 syscall.errno,这是可以转换为 int 的整数类型。在 ubuntu 上运行此代码会产生错误代码 22:

if serr, ok := err.err.(syscall.errno); ok {
        fmt.println(int(serr))
    }

请记住,我不知道这种检查是否跨平台。

如果您只想检查文件是否是符号链接,您可以使用 Lstat 获取 fileinfo 结构并进行检查:

fi.Mode() & os.ModeSymlink != 0

到这里,我们也就讲完了《正确的方式来提取 PathError 中的 errno 值》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>