go中defer的 执行顺序

# 如果一个函数中有多个defer语句,它们会以LIFO(后进先出)的顺序执行,哪怕函数或某个延迟调用发生错误,这些调用依旧会被执。

#defer 在函数内部使用,一般多用在枷锁、解锁;打开文件、关闭文件等成对出现的情况

func testSub(x int) {
    result := 100 / x
    fmt.Println("result = ", result)
}

func TestDeferFunc(t *testing.T) {
    defer fmt.Println("aaaaaaaaaaaaaaaa")
    defer fmt.Println("bbbbbbbbbbbbbbbb")

    //调用一个函数,导致内存出问题,除数不能为0
    defer func() {
        testSub(0)
    }()

    defer fmt.Println("cccccccccccccccc")
}
    ////先进后出原则
    //cccccccccccccccc
    //bbbbbbbbbbbbbbbb
    //aaaaaaaaaaaaaaaa
    //panic: runtime error: integer divide by zero

 

//补充:

 

posted on 2021-01-06 14:56  HelloOcean  阅读(608)  评论(0)    收藏  举报

导航