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

时间:2018-08-07 23:55:21

标签: 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
}

the docs说:

  

如果有错误,它将是* PathError类型。

我认为没有办法检查类型断言。我缺少基本的东西吗?我在Go中进行错误处理的过程总是有些懈怠。

2 个答案:

答案 0 :(得分:1)

“类型” error是一个接口。接口没有具体类型。要获取值的类型,可以使用类型断言或类型开关:

// Type assertion
_, ok := err.(*PathError)

// Type switch
switch err.(type) {
case *PathError:
    // You know the type now
}

这是一种惯用的方法,可以找出错误的类型。就像在指定的注释中一样,os包中已经有一个函数可以为您执行此操作(https://golang.org/pkg/os/#IsNotExist

答案 1 :(得分:0)

前几天我刚处理过。如果文件不存在,则Flash Air的错误将是os.Remove()

因此您可以使用如下逻辑:

syscall.ENOENT

当然,如另一个答案所示,if err != nil { e, ok := err.(*os.PathError) if ok && e.Err == syscall.ENOENT { // The file didn't exist w.WriteHeader(http.StatusNotFound) return } else { // Error other than syscall.ENOENT } } 很简单而且很惯用。希望我能在今天之前看到它。