這期內(nèi)容當中小編將會給大家?guī)碛嘘P(guān)golang中recover的用法,以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
成都創(chuàng)新互聯(lián)IDC提供業(yè)務:溫江服務器租用,成都服務器租用,溫江服務器租用,重慶服務器租用等四川省內(nèi)主機托管與主機租用業(yè)務;數(shù)據(jù)中心含:雙線機房,BGP機房,電信機房,移動機房,聯(lián)通機房。
recover
雖然沒有try catch機制,Go其實有一種類似的recover機制,功能弱了點,用法很簡單:
package main import "fmt" func main() { fmt.Printf("%d\n", cal(1, 2)) fmt.Printf("%d\n", cal(5, 2)) fmt.Printf("%d\n", cal(5, 0)) fmt.Printf("%d\n", cal(9, 2)) } func cal(a, b int) int { defer func() { if err := recover(); err != nil { fmt.Printf("%s\n", err) } }() return a / b }
首先,大家得理解defer的作用,簡單說defer就類似于面向?qū)ο罄锩娴奈鰳?gòu)函數(shù),在這個函數(shù)終止的時候會執(zhí)行,即使是panic導致的終止。
所以,在cal函數(shù)里面每次終止的時候都會檢查有沒有異常產(chǎn)生,如果產(chǎn)生了我們可以處理,比如說記錄日志,這樣程序還可以繼續(xù)執(zhí)行下去。
package main import ( "errors" "fmt" "math" ) func main() { _, err := IntFromInt64(math.MaxInt32 + 1) if err != nil { fmt.Println(err) } } func ConvertInt64ToInt(i64 int64) int { if math.MinInt32 <= i64 && i64 <= math.MaxInt32 { return int(i64) } panic("can't convert int64 to int") } func IntFromInt64(i64 int64) (i int, err error) {//這里 defer func() { if err2 := recover(); err2 != nil { i = 0//這里 err = errors.New("ttt")//這里 } }() i = ConvertInt64ToInt(i64) return i, nil }
主要思想:return之前利用defer修改返回變量(提前確定為i和err)的值
關(guān)于golang中recover的用法就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
標題名稱:golang中recover的用法
文章轉(zhuǎn)載:http://m.newbst.com/article46/gdspeg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供虛擬主機、網(wǎng)站設計、響應式網(wǎng)站、網(wǎng)站內(nèi)鏈、標簽優(yōu)化、營銷型網(wǎng)站建設
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)