如果一個導入的庫產生了一個可以恐慌的 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關鍵字是微不足道的。當然也有例外。
- 1 回答
- 0 關注
- 108 瀏覽
添加回答
舉報
0/150
提交
取消
