关闭锁/释放资源
l.Lock()
defer l.Unlock()
恢复错误
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered in f", r)
}
}()
panic(2)
统计耗时
defer func(begin time.Time) {
took:=time.Since(begin).Nanoseconds() / 1000
fmt.Print("took time:",took)
}(time.Now())
do()
修改结果
可用于捕捉panic后修改返回结果,结果需要命名
如下结果是2
func Do()(i int){
defer func() {
i++
}()
return 1
}
补充
defer的范围是整个方法的,如果想更细粒度的话,可以声明匿名方法
func (){
l.Lock()
do1()
defer l.Unlock()
}()
do2()
注意
defer也是有性能损耗的,如果对执行时机明确的话和对性能要求比较高的话还有在for循环里面,最好还是不加defer