【GoLang】GoLang 错误处理 -- 官方推荐方式 示例

最严谨的方式,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层的时候再捕获异常并处理,这样可以大大减少代码量,虽然简单粗暴,但是易于维护。

原文地址:https://www.cnblogs.com/junneyang/p/6089152.html