虽然会输出:defer1,但defer1里面的if为假,不知道为什么
package main
import (
"fmt"
)
var flag int = -1
func main() {
test()
}
func test() {
defer func() {
fmt.Println("defer1")
if err := recover(); err != nil {
fmt.Println("err1:",err)
}
}()
if flag > 0 {
panic(">0")
}
defer func() {
fmt.Println("defer2")
if err := recover(); err != nil {
fmt.Println("err2:",err)
}
}()
if flag < 0 {
panic("<0")
}
}
有疑问加站长微信联系(非本文作者)

先理解defer顺序,特么第二个都把错误处理了,当然第一个不会再重新处理错误。基础也太差了。官网文档先过一遍。
(◡¸◡✿),我想是defer2中的recover获取到err,就重置err为nil,所以第defer1中的recover获取不到err了