知识卡片
Recover要在边界
内容
recover 只有放在 defer 函数中才有效,适合在 goroutine 或服务入口边界兜底。它不应该替代错误处理;频繁依赖 recover 说明业务失败路径没有被清楚建模。
参考来源
- 位置:《Go语言高级开发与实战》第2章《Go语言高级编程技巧》(源文件:_epub-src/GoYu Yan Gao Ji Kai Fa Yu Shi Zhan_split_015.html)
- 结论依据:原文明确 recover 必须在 defer 函数中直接调用才有效,并在异常处理技巧中建议部署后恢复异常,支撑边界兜底结论。
- 原始内容:会被同名的局部变量屏蔽,代码如下。 2 recover()函数必须在defer函数中运行 需要注意的是,recover()函数捕获的是祖父级调用时的异常,直接调用时无效,代码如下。 直接defer调用也是无效的,代码如下。 defer调用时,多层嵌套依然无效,代码如下。 必须在defer函数中直接调用才有效,代码如下。 3 闭包错误引用同一个变量 在Go语言中,在闭包中使用变量容易混淆。例如,当想打印一个倒序的数字时,如果通