登录
首页 >  Golang >  Go问答

受控清理资源仅在函数即将返回错误时进行

来源:stackoverflow

时间:2024-02-05 22:45:22 279浏览 收藏

各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题《受控清理资源仅在函数即将返回错误时进行》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!

问题内容

假设我有一个函数,首先创建一个目录,然后执行更多操作,如下所示:

{
    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 语句,但在没有错误的情况下也会执行。


正确答案


是的,延迟函数总是会被执行,但它是否删除目录完全取决于你。

使用延迟函数,并检查错误。如果没有错误,请勿删除该目录。为此,请使用命名结果参数,例如:

func foo() (result resulttype, err error) {
    path := "some folder"

    defer func() {
        if err != nil { // this is the result err
            if err2 := os.removeall(path); err2 != nil {
                // handle err2
            }
        }
    }()

    err := os.mkdir(path, os.modeperm)
    
    ...
}

请注意,如果有明确的 return 语句,例如:

return path, errors.New("bar")

上面的 return 语句首先将值分配给 resulterr,因此在延迟函数中您可以获取/查看这些值。

查看相关内容:如何在发生恐慌的 go 函数中返回一个值?

理论要掌握,实操不能落!以上关于《受控清理资源仅在函数即将返回错误时进行》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>