如果我做
s, err := os.Stat(path)
Run Code Online (Sandbox Code Playgroud)
而err != nil我需要知道,如果该文件不存在VS我没有权限来访问它,等我如何获得潜在的错误代码?阅读os包文档似乎建议我阅读错误字符串的文本 - 当然不是吗?
FUZxxl说的是什么.
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)