go中defer的 执行顺序
2021-01-05 本文已影响0人
小ocean
如果一个函数中有多个defer语句,它们会以LIFO(后进先出)的顺序执行,哪怕函数或某个延迟调用发生错误,这些调用依旧会被执
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