如何从错误本身获取错误代码 "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)
为真。
此代码可以是 运行 这里: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)
为真。