Go語言使用defer+recover解決panic導(dǎo)致程序崩潰的問題
案例:如果我們起了一個協(xié)程,但這個協(xié)程出現(xiàn)了panic,但我們沒有捕獲這個協(xié)程,就會造成程序的崩潰,這時可以在goroutine中使用recover來捕獲panic,進行處理,這樣主線程不會受到影響。
代碼如下:
package main import ( "fmt" "time" ) func sayHello() { for i := 0; i < 10; i++ { time.Sleep(time.Second) fmt.Println("hello world") } } func test() { //使用 defer + recover defer func() { //捕獲test拋出的panic if err := recover();err!=nil{ fmt.Println("test發(fā)生錯誤",err) } }() //定義一個map var myMap map[int]string myMap[0] = "golang" //error } func main() { go sayHello() go test() for i := 0; i < 10; i++ { fmt.Println("main() ok=",i) time.Sleep(time.Second) } }
執(zhí)行結(jié)果如下圖:
到此這篇關(guān)于Go語言使用defer+recover解決panic導(dǎo)致程序崩潰的問題的文章就介紹到這了,更多相關(guān)Go panic程序崩潰內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go 1.21新增的slices包中切片函數(shù)用法詳解
Go 1.21新增的 slices 包提供了很多和切片相關(guān)的函數(shù),可以用于任何類型的切片,本文通過代碼示例為大家介紹了部分切片函數(shù)的具體用法,感興趣的小伙伴可以了解一下2023-08-08GO web 數(shù)據(jù)庫預(yù)處理的實現(xiàn)
本文主要介紹了GO web 數(shù)據(jù)庫預(yù)處理的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-10-10axios?gin的GET和POST請求實現(xiàn)示例
這篇文章主要為大家介紹了axios?gin的GET和POST請求實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪2022-04-04