有多个defer时,return后先运行最后定义的defer,后进先出,栈的运行顺序
package main
import "fmt"
import "log"
func main(){
defer func() {
fmt.Println("-------")
}()
defer func() {
if err := recover(); nil != err {
fmt.Println("=======")
}
}()
foo()
defer func() {
fmt.Println("++++++++")
}()
}
func foo(){
fmt.Println("111")
log.Panic("A")
fmt.Println("222")
}
output:
111
2017/05/04 16:18:53 A
=======
-------
recover()的结果只能被调用一次
package main
import "fmt"
import "log"
func main(){
defer func() {
fmt.Println("-------")
}()
defer func() {
if err := recover(); nil != err {
fmt.Println("=======")
}
}()
foo()
defer func() {
fmt.Println("++++++++")
}()
}
func foo(){
fmt.Println("111")
log.Panic("A")
fmt.Println("222")
}
output:
111
2017/05/04 16:18:53 A
=======
-------
recover()的结果只能被调用一次