如何从错误本身获取错误代码 "os.ErrNotExist"?

how can i get the error code "os.ErrNotExist" from the error itself?

此代码可以是 运行 这里:https://play.golang.org/p/dX6dOzWS-Gx

cachedirstring := "./cache"
_, err = os.Stat(cachedirstring)
if err != nil {
    if errors.Is(err, os.ErrNotExist) {
        fmt.Printf("%T\n", err)
    }
    os.Exit(1)
}

这输出:

*fs.PathError

我从书上知道如何使用 errors.Is(err, os.ErrNotExist)。我的问题是,我怎么知道 errors.Is(err, os.ErrNotExist) 会 return true(通过代码,而不是搜索引擎)?

如何找到等于 err 的所有目标错误?

您当然可以效仿 errors.Is 在“纸上”所做的事情:

  • 检查在调用 erros.Unwrap 方法时通过错误链循环会做什么。
  • 对于每个错误,考虑它是否 == 到目标,或者它是否实现了 Is(error) bool 方法并且 return 为真。

例如,this line 如果 syscall.Errno 类型具有正确的错误代码,则 errors.Is(..., os.ErrNoExist) 为真。