通过电话后获得操作错误的惯用方法

pm1*_*100 3 go

如果我做

s, err := os.Stat(path)
Run Code Online (Sandbox Code Playgroud)

err != nil我需要知道,如果该文件不存在VS我没有权限来访问它,等我如何获得潜在的错误代码?阅读os包文档似乎建议我阅读错误字符串的文本 - 当然不是吗?

nem*_*emo 5

FUZxxl说的是什么.

os.Stat文档:

Stat返回FileInfo描述命名文件的内容.如果有错误,它将是类型*PathError.

PathError记录在同一页面上,声明它保存导致错误的操作,导致它的文件的路径以及底层系统的错误.如果在调用时找不到该文件os.Stat,则返回的错误将是这样的:

&PathError{"stat", "/your/file", syscall.Errno(2)}
Run Code Online (Sandbox Code Playgroud)

由于底层错误本质上取决于您使用的操作系统,因此您唯一能做的就是理解PathError.Err.对于UNIX系统,syscall程序包具有syscalls返回的Errno错误类型syscall.Stat.您可以将此值与包中常量syscall进行比较并处理错误(单击以播放):

stat, err := os.Stat(file)

if perr, ok := err.(*os.PathError); ok {
    switch perr.Err.(syscall.Errno) {
         case syscall.ENOENT: fmt.Println("No such file or directory.")
         default: panic("Unknown error")
    }
}
Run Code Online (Sandbox Code Playgroud)

这样做的更短的方法是使用os.IsNotExist它确实非常以上 ,并且是最重要的,独立于平台:

stat, err := os.Stat(file)

if err != nil && os.IsNotExist(err) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)