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

来源:8-5 服务器统一出错处理2

lieh1203

2022-04-14

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了,这个要怎么处理?

写回答

1回答

merlin丶kael

2022-04-16

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

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

0
0

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程