为了账号安全,请及时绑定邮箱和手机立即绑定

产生 goroutine 的库中的恐慌

产生 goroutine 的库中的恐慌

Go
RISEBY 2022-10-24 09:38:37
如果一个导入的库产生了一个可以恐慌的 goroutine 怎么办?在这种情况下,开发人员无法阻止程序退出。就像在这段代码中一样,使用延迟恢复调用坏库并没有帮助,因为该库正在生成一个恐慌的 goroutine,并且它不能被 main 的恢复捕获。我是否正确理解唯一的补救措施是在为一个项目选择依赖项时要非常小心,并希望作者不要做类似的事情?package mainimport (    "fmt"    "time")func main() {    defer func() {        r := recover()        if r != nil {            fmt.Println("panic caught")        }    }()    badLibrary()}func badLibrary() {    go recklessFunction()    time.Sleep(time.Second)}func recklessFunction() {    panic("something went wrong")}
查看完整描述

1 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

你是对的,你对此无能为力。os.Exit()例如,如果依赖项调用,您也不能。

无论如何,将 goroutines 作为库启动通常是不好的做法,让客户端(库的用户)选择是否需要并发执行(goroutine),添加go关键字是微不足道的。当然也有例外。


查看完整回答
反对 回复 2022-10-24
  • 1 回答
  • 0 关注
  • 62 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信