defer语句是用来延迟执行代码的,意思就是在执行一段代码的时候,只有执行完毕那一时间,才会执行defer语句。而且在遇见多个defer的时候,最开始的defer会是最后一个执行,可以通过以下代码看出来
example 1
package main
import "fmt"
func main() {
defer fmt.Println("Begin")
for i := 1; i < 4; i++ {
defer fmt.Printf("i value is [%d]\n", i)
}
defer fmt.Println("End")
}
结果
End
i value is [3]
i value is [2]
i value is [1]
Begin
Process exiting with code: 0
recover经常会和defer函数一起使用,这样会保证在触发一些panic的时候还可以正常的执行下边的代码。
example 2
package main
import (
"fmt"
)
func main() {
defer func(){
if p := recover();p != nil{
fmt.Println(p)
}
fmt.Println("End")
}()
i :=1
j :=0
k := i/j
fmt.Println(k)
}
结果
runtime error: integer divide by zero
End
Process exiting with code: 0