gpt4 book ai didi

go - 产生 goroutines 的库中的 panic

转载 作者:行者123 更新时间:2023-12-05 01:54:47 27 4
gpt4 key购买 nike

如果一个导入的库生成了一个会 panic 的 goroutine 怎么办?在这种情况下,开发人员无法阻止程序退出。

就像在这段代码中一样,使用延迟恢复调用一个错误的库没有帮助,因为该库正在生成一个 panic 的 goroutine,并且它不能被 main 的恢复捕获。

我的理解是否正确,唯一的补救办法是在为一个项目选择依赖项时非常小心,希望作者不要做类似的事情?

package main

import (
"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")
}

最佳答案

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

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

关于go - 产生 goroutines 的库中的 panic ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70533828/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com