在go
語言中,錯誤一般會由error
觸發,但是如果比較嚴重的錯誤(通常是沒有恰當處理的error
,也可是手動觸發) 會造成panic
。 一旦主程式panic
,會導致整個程式掛掉。如果這個錯誤不是那麼嚴重,我們希望程式可以繼續往下執行,而不是整個程式掛掉。
用recover
函式,對panic
錯誤進行攔截,避免上傳給主函式,進而避免整個程式掛掉。
可以在程式崩潰前,做一些操作,舉個例子,當 web 伺服器遇到不可預料的嚴重問題時,在崩潰前應該將所有的連線關閉,如果不做任何處理,會使得客戶端一直處於等待狀態。
如果給out函式傳入兩個相同的形參,就會引發panic
。
如果沒有recover
攔截,fmt.print
這行是執行不到的。
recover 僅在延遲函式func main()
func out(numb1, numb2 int) bool
}()if numb1 == numb2
return numb1 > numb2
}
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關鍵字修飾,但不能使用短變數宣告關鍵字 來定義常量。對於常量運算元,所有數 算 邏輯運算和比較運算的結果依然是常量,常量的轉...