go defer
来源:原创
时间:2019-02-25
作者:脚本小站
分类:GoLang
构造函数:初始化程序,赋予初始值等工作
析构函数:函数结束前的清理工作
defer 类似于其它语言的析构函数,在程序的最后调用
package main import "fmt" func main() { defer fmt.Println("bbb") fmt.Println("aaa") }
上面的函数先输出的是aaa
多个 defer 时,先写的后执行
代码有内存泄漏等错误时 defer 也能够调用到
与匿名函数搭配使用:
package main import "fmt" func main() { a := 10 b := 20 defer func() { fmt.Printf("a = %d b = %d\n", a, b) }() a = 111 b = 222 fmt.Printf("a = %d, b = %d\n", a, b) // 输出结果如下 // a = 111, b = 222 // a = 111 b = 222 }
与上面的区别是此时的匿名函数被赋值:
package main import "fmt" func main() { a := 10 b := 20 defer func(a, b int) { fmt.Printf("a = %d b = %d\n", a, b) }(a, b) // 在执行前参数已近被传入函数,这个时候的a和b的值还未被修改 a = 111 b = 222 fmt.Printf("a = %d, b = %d\n", a, b) // 输出结果如下 // a = 111, b = 222 // a = 10 b = 20 }