最近在学习golang 发现程序panic使用recover捕获,返回值被坑了。
在网上看到篇文章:https://studygolang.com/articles/4809
两个结论:
-
多个defer的执行顺序为“后进先出”;
-
defer、return、返回值三者的执行逻辑应该是:return最先执行,return负责将结果写入返回值中;接着defer开始执行一些收尾工作;最后函数携带当前返回值退出。
recover 捕获异常后,打印异常详情: debug.PrintStack()
示例:
defer func() {
if err := recover(); err != nil {
debug.PrintStack()
fmt.Printf("Now happen some error:%v", port, err)
}
}()