Go defer

Posted staff

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go defer相关的知识,希望对你有一定的参考价值。

defer  用在函数中

把它后面的语句延迟到函数即将返回的时候执行
如果有多个defer语句,函数结束时会先执行后面放进去的
用于关闭文件操作,关闭数据库连接,断开socket等


defer执行时间的图

技术图片

 

 


1.返回值赋值 2.真正的RET返回
如果有defer,会在第1、2步之间执行

 

 

无聊的笔试题

func f1() int { //这里没有x,下面修改的返回值不是这里的
    x := 5
    defer func() {
        x++  
    }()
    return x //返回5
}

func f2() (x int) { //这里有x,修改的是这里的
    defer func() {
        x++
    }()
    return 5  //返回6
}

func f3() (y int) { //有y,下面只要不修改y就动不了返回值
    x := 5
    defer func() {
        x++
    }()
    return x  //返回5
}
func f4() (x int) {  //有x,但是x++修改的是副本
    defer func(x int) {
        x++
    }(x)
    return 5  //返回5
}
func main() {
    fmt.Println(f1())  
    fmt.Println(f2())
    fmt.Println(f3())
    fmt.Println(f4())
}

 

以上是关于Go defer的主要内容,如果未能解决你的问题,请参考以下文章

golang 详解defer

angularJS $q

Golang 高效实践之deferpanicrecover实践

script标签中defer和async的区别

Go语言之路—博客目录

龙芯Go!Go!Go!——龙芯平台上构建Go语言环境指南