# 2.11 错误处理

# 2.11.1 基础介绍

标准库的error相对比较简单,无法对错误的状态信息进行传递。为此,框架层专门设计了一套错误处理机制,通过errors.NewError()和codes.Convert()可以实现错误在集群服务间随意转换。

为了避免标准库errors与框架库errors上的名字冲突,方便开发者使用。框架库errors也重载了标准库errors的所有函数。因此,无论你是想创建普通的error还是框架设计的error,你都可以使用框架库的errors。

# 2.11.2 错误接口

  1. 使用场景

所有需要返回error的场景,尤其是在集群间传递错误码的场景,都需要使用框架库的errors。

  1. 使用方式
import "github.com/dobyte/due/v2/errors"
1
  1. 接口文档

https://pkg.go.dev/github.com/dobyte/due/v2/errors (opens new window)

# 2.11.3 错误码接口

  1. 使用场景

所有需要在集群间传递错误码的场景。

  1. 使用方式
import "github.com/dobyte/due/v2/codes"
1
  1. 接口文档

https://pkg.go.dev/github.com/dobyte/due/v2/codes (opens new window)

# 2.11.4 示例代码

以下完整示例详见:errors-example (opens new window)

  1. 创建项目
$ mkdir errors-example
1
  1. 安装依赖
$ cd errors-example
$ go mod init errors-example
$ go get github.com/dobyte/due/v2@v2.4.2
1
2
3
  1. 编写示例

文件位置: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
  1. 运行示例
$ 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