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

  • 相关阅读:
    JQuery[07]Dom操作
    系统钩子[02] 安装全局鼠标钩子
    [Java动态代理] 设计模式之代理模式
    对话框编程之模态对话框 [03]
    对话框编程之属性对话框 [05]
    [Java反射机制] 通过反射机制创建类的实例并调用其方法
    JQuery[06] 过滤器、相对选择器
    JQuery[04] 节点遍历
    JQuery[13] Ajax的简单应用
    JQuery[09] CSS样式操作/节点操作
  • 原文地址:https://www.cnblogs.com/junneyang/p/6089152.html
Copyright © 2011-2022 走看看