golang中recover和panic用法
原文:http://www.52php.cn/article/p-fqwupiyj-bhd.html package main
import ( "fmt" ) func main() { panic("fault") fmt.Println("panic") }
运行结果: goroutine 16 [running]:… 解决办理:利用defer延迟处理的recover进行恢复,具体例子如下: package main
import (
"fmt"
)
func main() {
defer func() {
fmt.Println("1")
}()
defer func() {
if err := recover(); err != nil {
fmt.Println(err)
}
}()
panic("fault")
fmt.Println("2")
}
运行结果: fault 1 程序首先运行panic,出现故障,此时跳转到包含recover()的defer函数执行,recover捕获panic,此时panic就不继续传递.但是recover之后,程序并不会返回到panic那个点继续执行以后的动作,而是在recover这个点继续执行以后的动作,即执行上面的defer函数,输出1. 注意:利用recover处理panic指令,必须利用defer在panic之前声明,否则当panic时,recover无法捕获到panic,无法防止panic扩散. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |