检查错误消息的最惯用方法是什么?我的用例是err := os.Remove(path),我认为是成功的:
A)如果err == nil
或者
B) 如果err != nil但是由于找不到文件而抛出错误。
任何其他错误都会导致删除重试。目前我已将其包装在一个for { ... }循环中并正在检查:
if err == nil || strings.Contains(err.Error(), "no such file") {
// Success
} else {
// Fail
}
Run Code Online (Sandbox Code Playgroud)
由于文档说:
如果有错误,则其类型为 *PathError。
我认为没有办法通过类型断言进行检查。我错过了一些基本的东西吗?我在 Go 中的错误处理总是感觉有点草率。
“类型”error是一个接口。接口没有具体的类型。要获取值的类型,您可以使用类型断言或类型开关:
// Type assertion
_, ok := err.(*PathError)
// Type switch
switch err.(type) {
case *PathError:
// You know the type now
}
Run Code Online (Sandbox Code Playgroud)
这是找出错误类型的惯用方法。正如指定的注释中所示,os 包中已经有一个函数可以为您执行此操作(https://golang.org/pkg/os/#IsNotExist)
| 归档时间: |
|
| 查看次数: |
4362 次 |
| 最近记录: |