Skip to content

简介

eapp 是 ee-go 的应用生命周期管理模块,提供进程信号监听、优雅退出、事件注册和 package.json 读取能力。它监听系统信号(SIGINT、SIGTERM、SIGQUIT),触发退出流程,并支持在退出前执行用户注册的钩子函数(如关闭数据库连接)。

导入

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

API

Run()

说明:启动程序并监听系统信号。当收到 SIGINT、SIGTERM 或 SIGQUIT 信号时,自动调用 Close() 执行优雅退出流程。

参数:无

返回值:无

示例

go
package main

import (
    "github.com/wallace5303/ee-go/eboot"
)

func main() {
    ego := eboot.New(staticFS)
    ego.Run() // 内部调用 eapp.Run(),阻塞等待信号
}

参见Close()


Close()

说明:执行进程优雅退出。设置退出标志,触发已注册的 beforeClose 事件钩子,等待 500ms,然后恢复标志并调用 os.Exit(0) 退出进程。该方法使用互斥锁防止并发调用。

参数:无

返回值:无

示例

go
eapp.Register("beforeClose", func() {
    // 退出前清理资源
    sqlitelib.CloseDatabase()
})

// 手动触发退出(通常由信号监听器自动调用)
eapp.Close()

参见Register()


ReadPackage()

说明:读取 Electron 的 package.json 文件内容。根据运行环境选择不同的读取策略:开发模式下优先从项目目录读取;生产模式下根据静态资源配置决定是从嵌入文件系统还是外部文件读取。如果文件不存在,则抛出异常并退出。

参数:无

返回值map[string]any — package.json 的完整内容,包括 nameversion 等字段

示例

go
pkg := eapp.ReadPackage()
appName := pkg["name"].(string)
appVersion := pkg["version"].(string)
fmt.Printf("App: %s v%s\n", appName, appVersion)

参见econfig.GetStatic(), estatic.ReadJsonStrict()


Register(eventName, handler, args...)

说明:注册生命周期事件钩子函数。目前仅支持 beforeClose 事件。注册的函数在进程退出时被调用,可用于释放资源(关闭数据库、停止后台任务等)。如果注册不支持的事件名称,会输出警告日志并忽略注册。

参数

参数类型必填说明
eventNamestring事件名称,目前仅支持 "beforeClose"
handlerinterface{}钩子函数,参数类型必须与 args 匹配
args...interface{}传递给 handler 的参数,可为空

返回值:无

示例

go
// 无参数注册
eapp.Register("beforeClose", func() {
    sqlitelib.CloseDatabase()
    fmt.Println("数据库已关闭")
})

// 带参数注册
eapp.Register("beforeClose", func(msg string) {
    fmt.Println("正在退出:", msg)
}, "goodbye")

参见Close(), Staff


Staff

说明:事件钩子的内部数据结构,存储已注册的事件名称、反射值形式的处理函数及其参数。

字段类型说明
Namestring事件名称
Handlerreflect.Value处理函数的反射值
Args[]interface{}传递给处理函数的参数列表

Events

说明:支持的事件名称列表,目前包含 "beforeClose"

类型[]string


BeforeCloseFlag

说明beforeClose 事件的常量标识符,值为 "beforeClose"

类型string