当前位置: 代码迷 >> 综合 >> golang-defer
  详细解决方案

golang-defer

热度:46   发布时间:2023-10-13 09:22:52.0

defer的作用是延迟函数的调用(defer后面必须是函数和方法),常用于保证一些资源最终一定能够得到回收和释放。
1、这些调用以先进后出的顺序在函数返回前执行

package mainimport "fmt"func main(){
    defer func(){
    fmt.Println("first")}()defer func(){
    fmt.Println("second")}()fmt.Println("star")
}

执行结果:
golang-defer
2、defer后面的函数实参是在注册时通过值拷贝传递的

package mainimport "fmt"func main(){
    a:=0defer func(a int){
    fmt.Println("defer",a)}(a)a++fmt.Println("main",a)
}

执行结果:
golang-defer
3、
1)defer必须先注册才能执行,如果放在return之后,则因为defer没有被注册不会被执行

package mainimport "fmt"func main(){
    fmt.Println("star")returndefer func(){
    fmt.Println("defer")}()
}

2)调用os.Exit(int)主动退出进程,defer也不会执行

package mainimport ("fmt""os"
)func main(){
    defer func(){
    fmt.Println("defer")}()fmt.Println("star")os.Exit(1)return}

1)和2)的执行结果;
golang-defer