假设我有一个函数,它从创建一个目录开始,然后做一些其他的事情,像这样:
{
err := os.Mkdir(path, os.ModePerm)
...
err = doSomething()
if err != nil {
return nil, err
}
err = doSomethingElse()
if err != nil {
return nil, err
}
return path, nil
}
现在,我想让函数删除它在所有发生错误的情况下创建的目录,最干净的方法是什么?
一种方法是在每个if
分支中调用os.RemoveAll
,但这不是一个很好的解决方案;另一种方法是使用defer
语句,但这也会在没有错误的情况下执行。
1条答案
按热度按时间3zwtqj6y1#
是的,一个延迟的函数总是会被执行,但是它是否删除目录完全取决于你。
使用延迟函数,并检查错误。如果没有错误,则不删除目录。要使此操作正常工作,请使用命名结果参数,例如:
请注意,如果存在如下显式
return
语句:上面的
return
语句首先给result
和err
赋值,所以在延迟函数中,你可以得到/看到这些值。参见相关内容:如何在Go语言中返回一个异常的值?