# Go/JS 底层低代码引擎架构与开发计划 **目标受众**: 负责实现该项目的 AI 开发助手。 **项目背景**: 这是一个用于 Go 应用的低代码框架,其核心目标是提供一个 **极低摩擦、无状态、对 AI 极度友好** 的 Go/JS 桥接层。允许业务系统在不重启、不重新编译的情况下,通过动态执行 JS 代码来扩展能力。 **核心原则**: 性能优先、快速失败 (Fail-Fast)、严格的测试覆盖、彻底解耦底层依赖。 --- ## 1. 架构总览 项目分为两个完全解耦的模块: ### 1.1 `go/jsmod` (注册与标准层) - **定位**: 轻量级注册中心,**零第三方依赖**。其他 Go 业务模块(如 `go/db`, `go/http`)仅引入此包进行能力暴露,避免污染 `goja` 依赖。 - **核心 API**: - `func Register(name string, exports map[string]any)`: 注册全局模块。`exports` 的 value 可以是函数、基本类型或复杂的 Go Struct/Pointer。 - `func GetModules() map[string]map[string]any`: 获取所有已注册的模块,供引擎层调用。 ### 1.2 `go/js` (执行与引擎层) - **定位**: 核心执行环境,依赖 `github.com/dop251/goja`、`go/cast` 和 `go/jsmod`。 - **核心职责**: 维护虚拟机对象池 (Pool)、实现 Go-JS 双向数据桥接 (Bridge)、处理无状态调用 (Call)、以及生成 AI 友好的文档 (TS Definition)。 --- ## 2. 核心技术规范与难点攻克 ### 2.1 模块引入机制 (Global Object) - **规范**: JS 侧通过全局 `go.` 对象访问注册的模块。 - **实现方案**: 在 VM 初始化时,将所有从 `jsmod` 获取的模块注入到全局 `go` 对象中。 ### 2.2 双向桥接与数据保真 (The Bridge) - **JS 调用 Go (入参)**: - 拦截 JS 传入的参数,如果 Go 函数的第一个参数是 `context.Context`,则自动从 VM 的 `__ctx__` 注入。 - 优先尝试直接赋值以保持 Host Object 指针一致性;若类型不匹配,则使用 `go/cast.Convert` 进行强类型转换。 - **快速失败**: 如果 `cast` 失败,立刻 `panic` 抛出 JS 异常。 - **Go 返回 JS (出参 & Host Object)**: - **已验证**: 利用 `goja` 的 Host Object 机制,Go 返回的指针在 JS 传递后返回 Go 侧,地址完全一致。 ### 2.3 无状态与全局池 (Versioned Pool) - 虚拟机池化复用 (`sync.Pool`)。 - **`js.Define(code string)`**: 增加全局版本号。 - **`js.Call(ctx context.Context, funcName string, args ...any) (any, error)`**: - 自动增量同步落后的 VM 版本。 - 确保 Call 之间无状态残留(每次 Call 注入新的 Context)。 ### 2.4 智能文档生成 (TypeScript D.TS) - **定位**: 为 AI 生成精准上下文。 - **`js.Doc() string`**: 自动反射 Go 模块,生成标准的 `.d.ts` 文件。 --- ## 3. 开发执行步骤 (Status: ALL COMPLETED) ### Phase 1: 基础设施建设 (Registry) - [x] 初始化 `go/jsmod` 独立仓库。 - [x] 实现 `jsmod.Register(name, map[string]any)`。 - [x] 编写基础单元测试。 ### Phase 2: 核心桥接器与数据保真 (Bridge & Test) - [x] 实现 `wrapGoFunc`,处理 `context` 自动注入,利用 `cast` 兼容转换。 - [x] **严苛测试验证**: `Go指针 -> JS变量 -> Go函数` 指针一致性通过。 - [x] 测试参数自动转换(如 "10" -> 10)通过。 ### Phase 3: 对象池与生命周期管理 (Pool) - [x] 实现 `js.Define(code)` 与增量版本同步。 - [x] 实现 `js.Call(ctx, name, args...)`。 - [x] 并发与版本同步测试通过。 ### Phase 4: AI 智能文档导出 (Doc) - [x] 实现反射解析 Go Struct 和 Func。 - [x] 生成 TypeScript `.d.ts` 字符串。 - [x] 测试验证生成内容准确性通过。 --- ## 4. 关键提示 (Hints) - 已经通过 `expV.Type().AssignableTo(argType)` 解决了指针丢失问题。 - `go/cast` 仅作为兜底转换,保证了性能与灵活性。 - 整个系统保持了无 CGO、纯 Go 的特性。