请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,请教一下 关于 defer func () {recover()}的问题

code:
func tryRecover() {
defer func() {
r := recover()
if err, ok := r.(error); ok {
fmt.Println("Error occurred: ", err)
} else {
// 无法转换error时,只能panic处理
panic(fmt.Sprintf(“I don’t know what to do: %v”, r))
}
}()
}

result:
ok
panic: I don’t know what to do:

goroutine 1 [running]:
main.tryRecover.func1()
D:/Go/depthgo/errhanding/recover/recover.go:14 +0xf9
main.tryRecover()
D:/Go/depthgo/errhanding/recover/recover.go:25 +0x85
main.main()
D:/Go/depthgo/errhanding/recover/recover.go:28 +0x17

老师,执行的代码里面没有报错,还是会进入到 defer func () { recover()}函数里面,触发panic了,这个要怎么处理?

正在回答 回答被采纳积分+3

1回答

merlin丶kael 2022-04-16 15:53:13

defer 后面的代码 一定会执行的 .

既然 你的 方法 没有 业务逻辑代码 就不用 写 defer func(){}() 了

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信