【GoLang】GoLang 錯誤處理 -- 官方推薦方式 示例

weixin_34162629發表於2016-11-22

最嚴謹的方式,Always檢查error,並做相應的處理

專案結構:

 

程式碼:

common.go:

package common

import (
    "github.com/pkg/errors"
)

func Functest(a int64, b int64) (c int64, err error) {
    if a < 0 || b < 0 {
        return c, errors.New("a or b is invalid")
    }
    c = a * b
    return c, err
}

 

godep_common.go

package main

import (
    "fmt"
    "os"
    "strconv"

    "github.com/junneyang/letsgo/common"
    "github.com/pkg/errors"
)

func FuncTestWrap() (c int64, err error) {
    a, err := strconv.ParseInt(os.Getenv("VAR_A"), 10, 64)
    if err != nil {
        return c, errors.Wrap(err, "VAR_A ParseInt Fail")
    }

    b, err := strconv.ParseInt(os.Getenv("VAR_B"), 10, 64)
    if err != nil {
        return c, errors.Wrap(err, "VAR_B ParseInt Fail")
    }

    c, err = common.Functest(a, b)
    return c, errors.Wrap(err, "FuncTestWrap Fail")
}

func main() {
    c, err := FuncTestWrap()
    fmt.Println(c, err)
}

 

是的,就是這麼蛋疼,

所有的error不能忽略,需要檢查,導致程式碼比較冗長。

 

這種辦法程式碼非常嚴謹,也是Golang官方期望的方式。Golang的標準庫程式碼也是這麼寫的。非常嚴謹。

但是很多時候其實並不想關注error,只是希望像Java/Python一樣有異常直接自動丟擲,誰關注異常的時候再進行檢查、處理。

尤其是在業務程式碼的架構層次較多的時候比如常見的Web應用,最佳實踐是底層只管丟擲異常,到Web層的時候再捕獲異常並處理,這樣可以大大減少程式碼量,雖然簡單粗暴,但是易於維護。

 

相關文章