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

  • 相关阅读:
    HTML中ID与NAME的区别
    三层架构的学习感悟(二)
    linux svn安装和配置,不结合apache
    _dopostback回发后台的局限
    ASP.NET 服务器端控件响应客户端事件
    linux centos 下面httpd支持的svn 服务器端安装
    最简单的html tab选项卡
    VC2010 控件的事件窗口面板空白解决办法
    记录一次低版本手机h5页面不能进行跳转
    设计模式的理解
  • 原文地址:https://www.cnblogs.com/junneyang/p/6089152.html
Copyright © 2020-2023  润新知