Cerrar los recursos de bloqueo / liberación
l.Lock()
defer l.Unlock()
Error de recuperación
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered in f", r)
}
}()
panic(2)
Estadísticas que requieren mucho tiempo
defer func(begin time.Time) {
took:=time.Since(begin).Nanoseconds() / 1000
fmt.Print("took time:",took)
}(time.Now())
do()
Resultado modificado
Se puede usar para modificar el resultado devuelto después de capturar el pánico, el resultado debe ser nombrado, el
resultado es 2
func Do()(i int){
defer func() {
i++
}()
return 1
}
suplemento
El alcance del aplazamiento es el método completo, si desea ser más detallado, puede declarar métodos anónimos
func (){
l.Lock()
do1()
defer l.Unlock()
}()
do2()
Nota
Aplazar también tiene una pérdida de rendimiento. Si el tiempo de ejecución es claro y los requisitos de rendimiento son relativamente altos, todavía está en el ciclo for. Es mejor no agregar aplazamiento