如果匯入的庫產生一個可能導致恐慌的 goroutine 怎么辦?在這種情況下,開發人員無法阻止程式退出。
就像在這段代碼中一樣,使用延遲恢復呼叫壞庫無濟于事,因為該庫正在產生一個恐慌的 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")
}
uj5u.com熱心網友回復:
你是對的,你對此無能為力。os.Exit()例如,如果依賴項呼叫,您也不能。
無論如何,將 goroutines 作為庫啟動通常是不好的做法,讓客戶端(庫的用戶)選擇是否需要并發執行(goroutine),添加go關鍵字是微不足道的。當然也有例外。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/400778.html
下一篇:使用密鑰加密訊息
