亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長資訊網(wǎng)
    最全最豐富的資訊網(wǎng)站

    golang recover后怎么返回

    golang recover后怎么返回

    recover

    雖然沒有try catch機制,Go其實有一種類似的recover機制,功能弱了點,用法很簡單: (推薦學習:go)

    package main import "fmt" func main() { fmt.Printf("%dn", cal(1, 2)) fmt.Printf("%dn", cal(5, 2)) fmt.Printf("%dn", cal(5, 0)) fmt.Printf("%dn", cal(9, 2)) } func cal(a, b int) int { defer func() { if err := recover(); err != nil { fmt.Printf("%sn", err) } }() return a / b }

    首先,大家得理解defer的作用,簡單說defer就類似于面向對象里面的析構函數(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)的值

    贊(0)
    分享到: 更多 (0)
    網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號