在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/GO/ go中錯(cuò)誤機(jī)制使用 error 還是使用 painc?

go中錯(cuò)誤機(jī)制使用 error 還是使用 painc?

在其他語言中的 try{}catche(){} 結(jié)構(gòu)通常是在入口函數(shù)下加上, 然后實(shí)現(xiàn)業(yè)務(wù)邏輯時(shí)出現(xiàn)異常就直接trhow Exception 就行

那么在 go 中, 有兩種方式, 一種是:

func A(a string) (res string, err error) {
    res, err = B(a)
    // 實(shí)際中的 A 函數(shù)調(diào)用不止一個(gè) B, 還有 C, D, E 什么的的
    if err != nil {
        return "", err
    }
    return res, nil
}

func B(b string) (res string, err error) {
    if b == "a" {
        return "hello " + b, nil
    } else {
        return "", errors.New("params need a")
    }
}

這種將 error 一層層向外翻

還是說通過 panic/recover的方式返回

func A(a string) (res string, err error) {
    defer func() {
        if err := recover(); err != nil {
            fmt.Println(err)
        }
    }()
    res = B(a)
    return res, err
}

func B(b string) (res string) {
    if b == "a" {
        return "hello " + b
    } else {
        panic("params need a")
    }
}

我的疑問是:

  1. 這兩種方式的使用場景是什么?
  2. 如果濫用 panic 會(huì)造成什么后果?
回答
編輯回答
不二心

推薦看兩篇文章,看一下就明白了。
https://blog.golang.org/defer...
https://www.jianshu.com/p/aee...
Golang錯(cuò)誤處理要好好理解一下,非常有必要

2017年4月10日 10:05