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

时间:2023-03-09 07:22:02
【GoLang】GoLang 错误处理 -- 官方推荐方式 示例

最严谨的方式,Always检查error,并做相应的处理

项目结构:

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

代码:

common.go:

package common

import (
"github.com/pkg/errors"
) func Functest(a int64, b int64) (c int64, err error) {
if a < || b < {
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"), , )
if err != nil {
return c, errors.Wrap(err, "VAR_A ParseInt Fail")
} b, err := strconv.ParseInt(os.Getenv("VAR_B"), , )
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层的时候再捕获异常并处理,这样可以大大减少代码量,虽然简单粗暴,但是易于维护。