go語言的panic和recover函數(shù)用法實例
Golang 有2個內(nèi)置的函數(shù) panic()
和 recover()
,用以報告和捕獲運行時發(fā)生的程序錯誤,與 error 不同,panic-recover 一般用在函數(shù)內(nèi)部。一定要注意不要濫用 panic-recover,可能會導(dǎo)致性能問題,我一般只在未知輸入和不可靠請求時使用。
golang 的錯誤處理流程:當(dāng)一個函數(shù)在執(zhí)行過程中出現(xiàn)了異?;蛴龅?panic()
,正常語句就會立即終止,然后執(zhí)行 defer 語句,再報告異常信息,最后退出 goroutine。如果在 defer 中使用了 recover() 函數(shù),則會捕獲錯誤信息,使該錯誤信息終止報告。
看代碼:
package main import "fmt" func main(){ defer func(){ fmt.Println("c") // if err := recover(); err != nil{ // fmt.Println(err) // }else{ // fmt.Println("hehe") // } // if err := recover(); err != nil{ // fmt.Println(err) // }else{ // fmt.Println("haha") // } fmt.Println("d") }() f() defer func(){ fmt.Println("e") }() } func f(){ fmt.Println("a") panic(10000) fmt.Println("b") fmt.Println("f") }
結(jié)果:
ubuntu@VM-0-15-ubuntu:~/taoge/go$ go run test.go
a
c
d
panic: 10000
goroutine 1 [running]:
panic(0x4b8480, 0xc82000a2c0)
/usr/lib/go-1.6/src/runtime/panic.go:481 +0x3e6
main.f()
/home/ubuntu/taoge/go/test.go:34 +0x115
main.main()
/home/ubuntu/taoge/go/test.go:25 +0x35
exit status 2
ubuntu@VM-0-15-ubuntu:~/taoge/go$
看代碼:
package main import "fmt" func main(){ defer func(){ fmt.Println("c") if err := recover(); err != nil{ fmt.Println(err) }else{ fmt.Println("hehe") } if err := recover(); err != nil{ fmt.Println(err) }else{ fmt.Println("haha") } fmt.Println("d") }() f() defer func(){ fmt.Println("e") }() } func f(){ fmt.Println("a") panic(10000) fmt.Println("b") fmt.Println("f") }
結(jié)果:
ubuntu@VM-0-15-ubuntu:~/taoge/go$ go run test.go
a
c
10000
haha
d
ubuntu@VM-0-15-ubuntu:~/taoge/go$
好好體會下。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
- Go panic和recover函數(shù)使用細(xì)節(jié)深入探究
- Go中的 panic / recover 簡介與實踐記錄
- 一文帶你掌握Golang中panic與recover的使用方法
- GoLang中panic與recover函數(shù)以及defer語句超詳細(xì)講解
- Golang中panic與recover的區(qū)別
- Golang異常處理之defer,panic,recover的使用詳解
- Golang 錯誤捕獲Panic與Recover的使用
- 小學(xué)生也能看懂的Golang異常處理recover panic
- Go中recover與panic區(qū)別詳解
- go語言異常panic和恢復(fù)recover用法實例
- Go語言panic和recover的用法實例
相關(guān)文章
一鍵定位Golang線上服務(wù)內(nèi)存泄露的秘籍
內(nèi)存泄露?別讓它拖垮你的Golang線上服務(wù)!快速掌握Go語言服務(wù)內(nèi)存泄漏排查秘籍,從此問題無處遁形,一文讀懂如何精準(zhǔn)定位與有效解決Golang應(yīng)用中的內(nèi)存問題,立即閱讀,讓性能飛升!2024-01-01Golang實現(xiàn)自己的Redis(TCP篇)實例探究
這篇文章主要介紹了Golang實現(xiàn)自己的Redis(TCP篇)實例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01GoFrame?gtree樹形結(jié)構(gòu)的使用技巧示例
這篇文章主要為大家介紹了GoFrame?gtree樹形結(jié)構(gòu)的使用技巧示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06