亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

產生 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 關注
  • 108 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號