调查下,有多少人用 Golang Go语言中的 panic + defer + recover 的?

发布于 1周前 作者 sinazl 来自 Go语言

null
调查下,有多少人用 Golang Go语言中的 panic + defer + recover 的?

6 回复

从来不没主动抛过 panic ,预期初始化资源失败直接 fatal 。。

更多关于调查下,有多少人用 Golang Go语言中的 panic + defer + recover 的?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


业务里用 panic 用的少,基本都是在应用启动时使用; defer + recover 一般在协程里使用,防止协程泄露或者意外 panic

只在 main 函数里用 panic ,业务里不用。defer + recover 一般在协程里以防万一。

几乎所有的错误处理我都会用到 defer + panic ,一来省的写一大堆 if err 判断,二来方便 err 的统一处理和格式化。

另外 golang 的 encoding/json 标准库中也直接用了 defer recover 来处理错误,这种做法官方也是认可的。
https://cs.opensource.google/go/go/+/refs/tags/go1.21.6:src/encoding/json/encode.go;drc=04c628935d1487632f903e4e0688fb7a34063752;l=285

从来不主动 panic ,defer + recover 也只是用在协程中防止把主进程干崩

在Go语言社区中,panicdeferrecover 这三个关键字组成的错误处理机制是一个相当受欢迎且强大的工具,用于处理运行时出现的异常情况。虽然它们不像传统的错误处理(通过返回错误值)那样频繁使用于每个函数调用的边界,但在处理不可恢复的逻辑错误或程序中的意外情况时,这套机制显得尤为有效。

panic 用于触发一个异常,通常用于遇到无法继续执行的严重错误时;defer 确保在函数返回前执行某些清理工作,比如关闭文件、解锁资源等;而 recover 则用于从 panic 触发的异常中恢复过来,防止程序崩溃,允许程序继续运行。

使用 panic + defer + recover 的开发者数量虽难以精确统计,但在处理并发编程、Web服务、以及需要高度容错能力的系统中,这一组合相当常见。特别是在构建微服务、API服务器或高性能网络应用时,开发者往往会利用这套机制来确保服务的稳定性和健壮性。

总之,尽管Go鼓励通过返回值处理错误,但在特定场景下,panic + defer + recover 提供了一种灵活且强大的错误处理策略,使得Go语言在错误处理方面既传统又现代,满足了多样化的开发需求。因此,可以合理推测,在Go语言社区中,使用这一组合的开发者数量是相当可观的。

回到顶部