GO語言異常處理機(jī)制panic和recover分析
本文實(shí)例分析了GO語言異常處理機(jī)制panic和recover。分享給大家供大家參考。具體如下:
Golang 有2個(gè)內(nèi)置的函數(shù) panic() 和 recover(),用以報(bào)告和捕獲運(yùn)行時(shí)發(fā)生的程序錯(cuò)誤,與 error 不同,panic-recover 一般用在函數(shù)內(nèi)部。一定要注意不要濫用 panic-recover,可能會(huì)導(dǎo)致性能問題,我一般只在未知輸入和不可靠請(qǐng)求時(shí)使用。
golang 的錯(cuò)誤處理流程:當(dāng)一個(gè)函數(shù)在執(zhí)行過程中出現(xiàn)了異?;蛴龅?panic(),正常語句就會(huì)立即終止,然后執(zhí)行 defer 語句,再報(bào)告異常信息,最后退出 goroutine。如果在 defer 中使用了 recover() 函數(shù),則會(huì)捕獲錯(cuò)誤信息,使該錯(cuò)誤信息終止報(bào)告。
示例:
import (
"log"
"strconv"
)
//捕獲因未知輸入導(dǎo)致的程序異常
func catch(nums ...int) int {
defer func() {
if r := recover(); r != nil {
log.Println("[E]", r)
}
}()
return nums[1] * nums[2] * nums[3] //index out of range
}
//主動(dòng)拋出 panic,不推薦使用,可能會(huì)導(dǎo)致性能問題
func toFloat64(num string) (float64, error) {
defer func() {
if r := recover(); r != nil {
log.Println("[W]", r)
}
}()
if num == "" {
panic("param is null") //主動(dòng)拋出 panic
}
return strconv.ParseFloat(num, 10)
}
func main() {
catch(2, 8)
toFloat64("")
}
輸出如下:
2014/11/01 22:54:23 [E] runtime error: index out of range
2014/11/01 22:54:23 [W] param is null
希望本文所述對(duì)大家的GO語言程序設(shè)計(jì)有所幫助。
- golang?中?recover()的使用方法
- go語言異常panic和恢復(fù)recover用法實(shí)例
- go語言的panic和recover函數(shù)用法實(shí)例
- Golang中panic與recover的區(qū)別
- Go panic和recover函數(shù)使用細(xì)節(jié)深入探究
- Go中recover與panic區(qū)別詳解
- Golang Recover處理錯(cuò)誤原理解析
- Golang利用Recover進(jìn)行錯(cuò)誤處理
- golang?recover函數(shù)使用中的一些坑解析
- go使用Cron定時(shí)實(shí)現(xiàn)recover機(jī)制
相關(guān)文章
Golang將Map的鍵值對(duì)調(diào)的實(shí)現(xiàn)示例
本文主要介紹了Golang將Map的鍵值對(duì)調(diào)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
詳解Go語言如何實(shí)現(xiàn)并發(fā)安全的map
go語言提供的數(shù)據(jù)類型中,只有channel是并發(fā)安全的,基礎(chǔ)map并不是并發(fā)安全的,本文為大家整理了三種實(shí)現(xiàn)了并發(fā)安全的map的方案,有需要的可以參考下2023-12-12
Go語言基礎(chǔ)語法之結(jié)構(gòu)體及方法詳解
結(jié)構(gòu)體類型可以用來保存不同類型的數(shù)據(jù),也可以通過方法的形式來聲明它的行為。本文將介紹go語言中的結(jié)構(gòu)體和方法,以及“繼承”的實(shí)現(xiàn)方法2021-09-09
Golang實(shí)現(xiàn)定時(shí)任務(wù)的幾種方法小結(jié)
在 Golang 開發(fā)中,定時(shí)任務(wù)是常見的需求,本文將介紹幾種在 Golang 中實(shí)現(xiàn)定時(shí)任務(wù)的方法,包括 time 包的定時(shí)器、ticker,以及第三方庫 cron,并通過示例代碼展示它們的使用方式,需要的朋友可以參考下2024-01-01

