检查错误消息的最惯用的方法是什么?我的用例是,在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中进行错误处理的过程总是有些懈怠。
答案 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
}
}
很简单而且很惯用。希望我能在今天之前看到它。