戈朗组合错误



假设你有一个简单的函数,如下所示:

func create(path string) error {
        if err := ioutil.WriteFile(path, []byte{}, 0666); err != nil {
                return err
        }
        if err := os.Chmod(path, 0666); err != nil {
                _ = os.Remove(path)
                return err
        }
        return nil
}

我不喜欢忽略 Remove() 中的错误。但是我也不想从 Chmod() 中淹没错误,我不想离开文件,因为我们没有成功创建()它。

这是一个简单的例子,也许函数可以写成不同的方法来避免这种情况,但是出现了更复杂的情况,而且我在golang社区中没有看到的这种错误组合,那么成语是什么?

解决方案是将 Remove 中的错误存储在一个单独的变量中,并将它们与 fmt 组合在一起。错误f:

if err := os.Chmod(path, 0666); err != nil {
        if e2 := os.Remove(path); e2 != nil {
            return fmt.Errorf("error changing permissions (%v); error deleting file (%v)", err, e2)
        }
        return err
}

最新更新