检查来自 os.Remove 的错误消息

Ada*_*ith 5 go

检查错误消息的最惯用方法是什么?我的用例是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 中的错误处理总是感觉有点草率。

apx*_*pxp 2

“类型”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

  • 嗯,我想我更喜欢 `os.IsNotExist()` 。谢谢! (2认同)