Error handling 戈朗组合误差
假设您有一个简单的函数:Error handling 戈朗组合误差,error-handling,go,Error Handling,Go,假设您有一个简单的函数: 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)
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.Errorf结合起来:
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
}