# 2.11 错误处理
# 2.11.1 基础介绍
标准库的error相对比较简单,无法对错误的状态信息进行传递。为此,框架层专门设计了一套错误处理机制,通过errors.NewError()和codes.Convert()可以实现错误在集群服务间随意转换。
为了避免标准库errors与框架库errors上的名字冲突,方便开发者使用。框架库errors也重载了标准库errors的所有函数。因此,无论你是想创建普通的error还是框架设计的error,你都可以使用框架库的errors。
# 2.11.2 错误接口
- 使用场景
所有需要返回error的场景,尤其是在集群间传递错误码的场景,都需要使用框架库的errors。
- 使用方式
import "github.com/dobyte/due/v2/errors"
1
- 接口文档
https://pkg.go.dev/github.com/dobyte/due/v2/errors (opens new window)
# 2.11.3 错误码接口
- 使用场景
所有需要在集群间传递错误码的场景。
- 使用方式
import "github.com/dobyte/due/v2/codes"
1
- 接口文档
https://pkg.go.dev/github.com/dobyte/due/v2/codes (opens new window)
# 2.11.4 示例代码
以下完整示例详见:errors-example (opens new window)
- 创建项目
$ mkdir errors-example
1
- 安装依赖
$ cd errors-example
$ go mod init errors-example
$ go get github.com/dobyte/due/v2@v2.4.2
1
2
3
2
3
- 编写示例
文件位置:errors-example/main.go (opens new window)
package main
import (
"github.com/dobyte/due/v2/codes"
"github.com/dobyte/due/v2/errors"
"github.com/dobyte/due/v2/log"
)
func main() {
err := errors.NewError(codes.NewCode(404, "not found"))
code := codes.Convert(err)
log.Infof("error: %s", err.Error())
log.Infof("code: %d", code.Code())
log.Infof("message: %s", code.Message())
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
- 运行示例
$ cd errors-example
$ go run main.go
INFO[2025/10/31 14:29:23.609253] main.go:14 error: code error: code = 404 desc = not found
INFO[2025/10/31 14:29:23.610934] main.go:15 code: 404
INFO[2025/10/31 14:29:23.610934] main.go:16 message: not found
1
2
3
4
5
2
3
4
5