go 語言的宕機回覆(recover)

2022-09-07 04:24:11 字數 1315 閱讀 2245

go語言中,錯誤一般會由error觸發,但是如果比較嚴重的錯誤(通常是沒有恰當處理的error,也可是手動觸發) 會造成panic。 一旦主程式panic,會導致整個程式掛掉。如果這個錯誤不是那麼嚴重,我們希望程式可以繼續往下執行,而不是整個程式掛掉。

recover函式,對panic錯誤進行攔截,避免上傳給主函式,進而避免整個程式掛掉。

可以在程式崩潰前,做一些操作,舉個例子,當 web 伺服器遇到不可預料的嚴重問題時,在崩潰前應該將所有的連線關閉,如果不做任何處理,會使得客戶端一直處於等待狀態。

如果給out函式傳入兩個相同的形參,就會引發panic

如果沒有recover攔截,fmt.print這行是執行不到的。

func main() 

func out(numb1, numb2 int) bool

}()if numb1 == numb2

return numb1 > numb2

}

recover 僅在延遲函式defer中有效

因為go語言沒有異常系統,其使用 panic 觸發宕機類似於其他語言的丟擲異常,recover 的宕機恢復機制就對應其他語言中的 try/catch 機制。

謹記一點recover只能恢復本協程的panic

注意:即使是子協程內引發的panic依然會導致主程式的掛掉,如下面的例子

那麼上面情況該怎麼解決?

其實就是在發生 panic 的協程裡面,用 recover 進行攔截。讓它傳不到主函式。

func main() 

func outone()

}()panic("錯誤")

}func outtwo()

}

參考文獻

go語言宕機(panic) 程式終止執行

宕機不是一件很好的事情,可能造成體驗停止 服務中斷,就像沒有人希望在取錢時遇到 atm 機藍屏一樣。但是,如果在損失發生時,程式沒有因為宕機而停止,那麼使用者將會付出更大的代價,這種代價可以是金錢 時間甚至生命。因此,宕機有時是一種合理的止損方法。go 語言可以在程式中手動觸發宕機,讓程式崩潰,這樣...

Go語言的特性

目前有2個版本的編譯器 go原生編譯器gc和非原生編譯器gccgo編譯器,其中,gc 版本的編譯器已經被移植到 windows 平台上,並整合在主要發行版中,你也可以通過安裝 mingw 從而在 windows 平台下使用 gcc 編譯器。這兩個編譯器都是以單通道的形式工作。編譯器gc編譯速度很快,...

Go語言的常量

go語言的常量是一種表示式,常量可以保證在編譯階段就計算出表示式的值。所有的常量本質上都屬於基本型別 數字 布林型 字串等。go語言的常量定義與變數類似,只不過使用了const關鍵字修飾,但不能使用短變數宣告關鍵字 來定義常量。對於常量運算元,所有數 算 邏輯運算和比較運算的結果依然是常量,常量的轉...