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

检查错误消息的最惯用的方法是什么?我的用例是在中err := os.Remove(path),我认为成功是:


A)如果 err == nil


或者


B)如果err != nil但由于找不到文件而引发错误。


任何其他错误都应导致删除重试。目前,我已经将其包装成一个for { ... }循环并正在检查:


if err == nil || strings.Contains(err.Error(), "no such file") {

    // Success

} else {

    // Fail

}

由于文档说:


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


我不认为有一种方法可以通过类型断言来检查。我缺少基本的东西吗?我在Go中进行错误处理时总是感到有些懈怠。


叮当猫咪
浏览 261回答 2
2回答

12345678_0001

前几天我刚处理过。如果文件不存在,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    }}当然,如另一个答案所示,这os.IsNotExist()是简单而惯用的。希望我能在今天之前看到它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go