构造函数:初始化程序,赋予初始值等工作
析构函数:函数结束前的清理工作
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
}