Golang处理错误返回时删除重复的代码

问题描述

我正在通过创建网络应用程序来学习Golang。使用Go时,我经常遇到这种情况

err = SomeFunction()

// Handling err
if err != nil {
   Logging(err)
   return err
}

在C或C ++中,“处理错误”部分可以使用marcO或INLINE FUNCTION删除重复的代码。有谁知道如何在Golang中做到这一点?

解决方法

您可以使用 https://gitlab.com/opennota/macro

像这样定义宏 在input.go.tmpl

func MACRO_m1(a,b int) {
    a = b ^ 1
}

func main(){
   m1(v1,v2)
}

在命令行上

macro input.go.tmpl output.go

将转换为

func main(){
     v1 = v2 ^ 1       
}
,

内联函数在Go中的工作方式与在C或其他语言中的工作方式不同。 Go编译器非常聪明,可以在其已编译的代码中将简单得多的函数转换为内联函数。

因此,如果您想减少代码重复或降低代码的认知复杂性(如果记录器对文件进行某些写操作会消耗时间),则可以采用以下方法创建匿名函数并将其分配给变量并记录您的错误。

func returnFromErr(){

    // Create a anonynous function and assign it a variable
    logErr := func (err error)bool {
        if err != nil{
            logger(err)
        }
        return err != nil
    }

    err := someFunction()
    // call the function and log your error. You can avoid certain level of duplication
    if logErr(err){return}

    fmt.Println("no error")
}

func main(){
returnFromErr()

}