简介
eerror 是 ee-go 的错误处理模块,提供三种错误抛出方法:简单错误、带原始错误包装的错误和带退出码的错误。所有错误都包含堆栈跟踪信息(使用 pkg/errors 库),并在终止进程前输出到 stderr。该模块还定义了框架统一使用的退出码常量,用于标识不同类型的异常退出原因。
导入
go
import "github.com/wallace5303/ee-go/eerror"API
Throw(msg)
说明:打印带堆栈跟踪的错误消息,然后以退出码 0 终止进程。适用于不需要区分错误类型的场景。
参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| msg | string | 是 | 错误消息内容 |
返回值:无(进程终止)
示例:
go
if dbName == "" {
eerror.Throw("数据库名称为必填项")
}参见:ThrowWrap(), ThrowWithCode()
ThrowWrap(msg, err)
说明:将原始错误 err 包装为带堆栈跟踪的新错误,使用 msg 作为上下文描述,然后以退出码 0 终止进程。适用于需要保留原始错误链的场景。
参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| msg | string | 是 | 错误上下文描述 |
| err | error | 是 | 原始错误对象 |
返回值:无(进程终止)
示例:
go
file, err := os.Open("config.json")
if err != nil {
eerror.ThrowWrap("打开配置文件失败", err)
}参见:Throw(), ThrowWithCode()
ThrowWithCode(msg, code)
说明:打印带堆栈跟踪的错误消息,然后以指定的退出码终止进程。适用于需要通过退出码区分错误类型的场景,是框架内部最常用的错误处理方式。
参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| msg | string | 是 | 错误消息内容 |
| code | int | 是 | 进程退出码,使用模块中定义的退出码常量 |
返回值:无(进程终止)
示例:
go
if !ehelper.FileIsExist(pkgPath) {
eerror.ThrowWithCode("The package.json does not exist!", eerror.ExitPackageFile)
}
if appName == "" {
eerror.ThrowWithCode("The app name is required!", eerror.ExitAppNameIsEmpty)
}参见:退出码常量
退出码常量
退出码用于标识不同类型的异常退出原因。所有常量定义在 eerror 包中,按类别分组如下:
启动阶段退出码
| 常量 | 值 | 说明 |
|---|---|---|
ExitOk | 0 | 正常退出 |
ExitAppNameIsEmpty | -1 | 应用名称为空 |
ExitCreateUserHomeConfDir | -2 | 创建用户配置目录失败(~/.config/{appName}) |
ExitCreateWorkDir | -3 | 创建工作目录失败 |
ExitCreateDataDir | -4 | 创建数据目录失败 |
ExitCreateLogDir | -5 | 创建日志目录失败 |
ExitCreateTmpDir | -6 | 创建临时目录失败 |
ExitPackageFile | -7 | package.json 文件不存在 |
ExitCreateUserHomeAppDir | -8 | 创建用户应用目录失败(~/.{appName}) |
ExitCreateDBDir | -9 | 创建数据库目录失败 |
配置阶段退出码
| 常量 | 值 | 说明 |
|---|---|---|
ExitConfigFile | -11 | 配置文件错误 |
ExitConfigFileFS | -12 | 配置文件系统错误 |
ExitConfigFileNotExist | -13 | 配置文件不存在 |
ExitConfigStaticErr | -14 | 静态资源配置错误 |
ExitConfigLogErr | -15 | 日志配置获取错误 |
ExitConfigCoreLogErr | -16 | 核心日志配置获取错误 |
ExitConfigHttpErr | -17 | HTTP 配置获取错误 |
日志阶段退出码
| 常量 | 值 | 说明 |
|---|---|---|
ExitConfigGenerate | -21 | 日志配置生成失败 |
HTTP 阶段退出码
| 常量 | 值 | 说明 |
|---|---|---|
ExitPortIsOccupied | -31 | 服务端口被占用 |
ExitHttpStartupErr | -32 | HTTP 服务启动失败 |
ExitListenPortErr | -33 | 端口监听失败 |
示例:
go
// 使用退出码常量
eerror.ThrowWithCode("端口 8080 已被占用", eerror.ExitPortIsOccupied)
// 在 Electron 主进程中,根据退出码判断 Go 进程退出原因
// 退出码 -7 → package.json 缺失
// 退出码 -31 → 端口冲突