1.defer用于资源的释放
用于在作用域结束之后执行函数的关键字,在当前函数或者方法返回之前调用一些用于收尾的函数,例如关闭文件描述符、关闭数据库连接以及解锁资源。
2. leetcode:79
https://tiancaiamao.gitbooks.io/go-internals/content/zh/03.4.html
规则:
给函数返回值赋值
调用defer函数
空的return
func f() (result int) {
defer func() {
result++
}()
return 0
}
func f() (result int) {
result = 0
func() { //defer被插入到return之前执行,也就是赋返回值和ret指令之间
result++
}()
return
}
结果是1
func f() (r int) {
t := 5
defer func() {
t = t + 5
}()
return t
}
func f() (r int) {
t := 5
r = t //给返回值赋值
func() {//defer被插入到赋值与返回之间执行,此例子返回值r没被修改过
t = t + 5
}
return //空的return指令
}
结果是5
func f() (r int) {
defer func(r int) {
r = r + 5
}(r)
return 1
}
func f() (r int) {
r = 1 //给返回值赋值
func(r int) {//这里改的r是传值传进去的r,不会改变要返回的那个r值
r = r + 5
}(r)
return //空的return
}
结果是1