【Golang包】Golang中error处理最佳实践
🔗【Golang包】Golang中error处理最佳实践
2022-10-13
| 2024-6-23
0  |  0 分钟
type
status
date
slug
summary
tags
category
icon
password
Sub-item
Last edited time
Jun 23, 2024 01:47 AM
Parent item
领域
  • 不要直接返回底层错误,最底层的错误使用New生成,或者%w包装基础库的错误
  • 不要针对错误内容和错误类型进行处理, 要针对错误行为进行处理
  • 不要处理2次错误,例如既将错误写进了日志,又将错误返回给上层调用者
  • 不要根据定义的error来判断error
    • 理由:会导致定义 error 和使用 error 的包之间建立了依赖关系。不过例子中的io 包是标准库的包,勉强还 Ok,如果是自定义error,容易引起循环引用的问题
  • 不要把error类型对外导出
    • 理由: 会在定义错误和使用错误的包之间形成依赖关系。
  • 不要忽略错误,对 error 做降级处理

error处理最佳实践1:使用error嵌套

适合处理各种业务逻辑错误。

嵌套方法

使用 fmt.Errorf 加上 %w 格式符来生成一个嵌套的 error

Unwrap方法

将嵌套的 error 解析出来,多层嵌套需要调用 Unwrap 函数多次,才能获取最里层的 error

Is方法

判断 err 是否和 target 是同一类型,或者 err 嵌套的 error 有没有和 target 是同一类型的,如果是,则返回 true

As方法

err错误链里找到和 target相等的并且设置 target所指向的变量。

error处理最佳实践2:统一error处理

适合代码改动较少,业务逻辑较长但清晰稳定的场景。
error保存到对象内部,按顺序执行处理逻辑后, 最后检查是否产生error

error处理最佳实践3:简化if err != nil

优化前, 往w的Writer中写入数据,每次写入都要判断err != nil
优化后,对Writer做一个包装,增加一个err变量保存写入时的错误, 在每次写入前都判断一下是否有err
 
 
软件开发
  • GoLang
  • Golang包
  • [转载]日志:每个软件工程师都应该知道的有关实时数据的统一抽象【Linux常用命令】SSH免密连接远端服务器
    目录