0x00 写在前面
首先是不解为什么要在 os.Stat 的返回之后还要再次调用 os.IsExist 对返回的 err 进行校验,私以为直接判断 file 是否为 nil 不就好了嘛?但其实原因如下。
0x01 原因
源程序并非对系统中所有的文件具有访问权限,或者在运行程序时会出现磁盘或者其他非程序内源性的错误,此时可能会导致 file 返回为 nil,但是文件确实存在的情况。此时,调用 os.IsExist 可以对这种情况进行二次校验,防止错误的覆盖原来的文件。一般的代码如下:
// V1
file, err := os.Stat(path)
if err != nil && !os.IsExist(err) {
fmt.Println("文件不存在!")
}
// V2 当然也可以简化为如下写法
file, err := os.Stat(path)
if os.isNotExist(err) {
fmt.Println("文件不存在!")
}
// V3 更简单的方式
file, err := os.Stat(path)
return !os.isNotExist(err)