Skip to content

简介

eerror 是 ee-go 的错误处理模块,提供三种错误抛出方法:简单错误、带原始错误包装的错误和带退出码的错误。所有错误都包含堆栈跟踪信息(使用 pkg/errors 库),并在终止进程前输出到 stderr。该模块还定义了框架统一使用的退出码常量,用于标识不同类型的异常退出原因。

导入

go
import "github.com/wallace5303/ee-go/eerror"

API

Throw(msg)

说明:打印带堆栈跟踪的错误消息,然后以退出码 0 终止进程。适用于不需要区分错误类型的场景。

参数

参数类型必填说明
msgstring错误消息内容

返回值:无(进程终止)

示例

go
if dbName == "" {
    eerror.Throw("数据库名称为必填项")
}

参见ThrowWrap(), ThrowWithCode()


ThrowWrap(msg, err)

说明:将原始错误 err 包装为带堆栈跟踪的新错误,使用 msg 作为上下文描述,然后以退出码 0 终止进程。适用于需要保留原始错误链的场景。

参数

参数类型必填说明
msgstring错误上下文描述
errerror原始错误对象

返回值:无(进程终止)

示例

go
file, err := os.Open("config.json")
if err != nil {
    eerror.ThrowWrap("打开配置文件失败", err)
}

参见Throw(), ThrowWithCode()


ThrowWithCode(msg, code)

说明:打印带堆栈跟踪的错误消息,然后以指定的退出码终止进程。适用于需要通过退出码区分错误类型的场景,是框架内部最常用的错误处理方式。

参数

参数类型必填说明
msgstring错误消息内容
codeint进程退出码,使用模块中定义的退出码常量

返回值:无(进程终止)

示例

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 包中,按类别分组如下:

启动阶段退出码

常量说明
ExitOk0正常退出
ExitAppNameIsEmpty-1应用名称为空
ExitCreateUserHomeConfDir-2创建用户配置目录失败(~/.config/{appName}
ExitCreateWorkDir-3创建工作目录失败
ExitCreateDataDir-4创建数据目录失败
ExitCreateLogDir-5创建日志目录失败
ExitCreateTmpDir-6创建临时目录失败
ExitPackageFile-7package.json 文件不存在
ExitCreateUserHomeAppDir-8创建用户应用目录失败(~/.{appName}
ExitCreateDBDir-9创建数据库目录失败

配置阶段退出码

常量说明
ExitConfigFile-11配置文件错误
ExitConfigFileFS-12配置文件系统错误
ExitConfigFileNotExist-13配置文件不存在
ExitConfigStaticErr-14静态资源配置错误
ExitConfigLogErr-15日志配置获取错误
ExitConfigCoreLogErr-16核心日志配置获取错误
ExitConfigHttpErr-17HTTP 配置获取错误

日志阶段退出码

常量说明
ExitConfigGenerate-21日志配置生成失败

HTTP 阶段退出码

常量说明
ExitPortIsOccupied-31服务端口被占用
ExitHttpStartupErr-32HTTP 服务启动失败
ExitListenPortErr-33端口监听失败

示例

go
// 使用退出码常量
eerror.ThrowWithCode("端口 8080 已被占用", eerror.ExitPortIsOccupied)

// 在 Electron 主进程中,根据退出码判断 Go 进程退出原因
// 退出码 -7 → package.json 缺失
// 退出码 -31 → 端口冲突