美文网首页
golang 用defer 捕获error 需小心

golang 用defer 捕获error 需小心

作者: 名白 | 来源:发表于2019-06-21 09:32 被阅读0次

有时一个函数内需要根据最后是否出错,决定是否执行某个操作。这时候如果函数的分支又比较多,就会比较麻烦了。
defer 处理这个情况刚好合适


func main() {
    var err error

    byErr(&err)

    defer byErr(&err)

    defer func(err *error) {
        byErr2(*err)
    }(&err)

    err = errors.New("hi,beautiful girl")
    byErr(&err)

}

func byErr(err *error) {
    if *err != nil {
        log.Println("is err")
    }else {
        log.Println("is nil")
    }
}

func byErr2(err error) {
    if err != nil {
        log.Println("is err")
    }else {
        log.Println("is nil")
    }
}


结果如下

2019/06/21 09:25:43 is nil
2019/06/21 09:25:43 is err
2019/06/21 09:25:43 is err
2019/06/21 09:25:43 is err

代码里两种方法都是可行的,但需要注意的是,稍不注意 照以下方式用 就bug了:

1,如果直接用 err 作为参数,会,恒为nil
2,如果用err 的指针作为参数, 会恒不为 nil

相关文章

  • golang 用defer 捕获error 需小心

    有时一个函数内需要根据最后是否出错,决定是否执行某个操作。这时候如果函数的分支又比较多,就会比较麻烦了。defer...

  • Golang之Defer

    引用 golang defer实现原理 Golang之轻松化解defer的温柔陷阱 Golang中defer、re...

  • 2017-12-04

    Golang,Panic,Defer,Recover 在golang中,recover在defer里发挥作用。 一...

  • go defer理解

    golang的defer是怎么工作的?defer在golang里是一个很基础的关键字,在函数内部使用defer声明...

  • golang中defer执行时机与常见问题

    defer是什么? defer的用途 defer的执行时机 了解defer的执行时机首先要知道golang的ret...

  • 聊聊golang的defer

    序 本文主要研究一下golang的defer defer return先赋值(对于命名返回值),然后执行defer...

  • 12 Golang defer panic recover

    defer Golang中的defer会将其后面跟随的语句进行延迟处理。在defer归属的函数即将返回时,将延迟处...

  • 2017-11-23 step

    1 Golang的返回值,return,defer 多个defer的顺序是stack顺序,FILO 正确的顺序是:...

  • Golang defer

    话题起于同事在微信群里发了张图,是Go Newsletter于13日在Twitter上转的一个代码截图,问输出是啥...

  • golang defer

    The arguments to the deferred function (which include the...

网友评论

      本文标题:golang 用defer 捕获error 需小心

      本文链接:https://www.haomeiwen.com/subject/brueqctx.html