登录
首页 >  Golang >  Go问答

减少 GoLang 中函数可能返回错误时的 if 嵌套的方法是什么?

来源:stackoverflow

时间:2024-02-13 10:36:26 391浏览 收藏

来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《减少 GoLang 中函数可能返回错误时的 if 嵌套的方法是什么?》,介绍一下,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

golang 最佳实践表明,可能失败的函数应该返回一个元组,其中元组的第一个元素是成功结果,第二个元素是错误。客户端代码在继续之前应首先检查错误。

但是,当您在同一函数中调用其他可能失败的函数时,这会导致许多 if/else。

func createbillingservice(cmd *cobra.command) (*billing.billingservice, error) {
    token, err := getauthtokenfromcmd(cmd)
    if err == nil {
        env, err := cmd.flags().getstring("billing-service-env")
        if err == nil {
            typedenv, err := billing.parseenv(env)
            if err != nil {
                return nil, err
            }
            envurl, err := typedenv.tourl()
            if err != nil {
                customhost, err := cmd.flags().getstring("billing-service-custom-host")
                if err == nil {
                    return billing.newservice(customhost, *token), nil
                }
                return nil, fmt.errorf("billing-service-custom-host can be set only if billing-env is custom ")
            }
            return billing.newservice(*envurl, *token), nil
        }
    }
    return nil, err
}

显然,一种选择是将其分解为至少三个函数,以便在 err 为零时执行。然而,在每个函数中,大部分代码都是用来处理错误的

func CreateBillingService(cmd *cobra.Command) (*billing.BillingService, error) {
    token, err := getAuthTokenFromCmd(cmd)
    if err == nil {
        return getBillingServiceWithToken(token, cmd)
    }
    return nil, err
}

go 中是否有更惯用的方法来处理错误?


正确答案


您可以通过在检测到错误时立即返回来扁平化嵌套的错误检查。

func CreateBillingService(cmd *cobra.Command) (*billing.BillingService, error) {
    token, err := getAuthTokenFromCmd(cmd)
    if err!=nil {
       return nil,err
    }
    env, err := cmd.Flags().GetString("billing-service-env")
    if err == nil {
       return nil,err
    }
    typedEnv, err := billing.ParseEnv(env)
    if err != nil {
       return nil, err
    }
    envUrl, err := typedEnv.ToUrl()
    if err != nil {
       customHost, err := cmd.Flags().GetString("billing-service-custom-host")
       if err == nil {
            return billing.NewService(customHost, *token), nil
       }
       return nil, fmt.Errorf("billing-service-custom-host can be set only if billing-env is custom ")
    }
    return billing.NewService(*envUrl, *token), nil
}

好了,本文到此结束,带大家了解了《减少 GoLang 中函数可能返回错误时的 if 嵌套的方法是什么?》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

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