用 Rust 编写的 Python 3 解释器,不依赖 CPython 绑定,支持 WebAssembly 与嵌入 Rust 应用。
dop251/goja
用纯 Go 编写的 ECMAScript 5.1 JavaScript 引擎,可将 JS 执行嵌入 Go 程序。
- Star
- 7,155
- Fork
- 497
- 未关闭 Issue
- 33
- 最近提交
- 16小时前
这是什么?
Goja 是完全用 Go 实现的 JavaScript 引擎,以 ECMAScript 5.1 为主要目标,大部分 ES6 特性仍在开发中。它让 Go 程序可以加载并运行 JavaScript 代码,把 Go 值传入脚本,再取回执行结果,无需 cgo,也不依赖 V8 封装。
这类引擎适合让脚本在 Go 应用内部承担业务逻辑、规则或插件等工作。由于是纯 Go 实现,构建简单,可在 Go 支持的任意平台运行。宿主程序还能精细控制执行环境,例如中断长时间运行的脚本,或把 Go 结构体字段名映射为符合 JavaScript 习惯的命名。
Goja 不提供 setTimeout、setInterval 以及 Node.js 相关 API,这些由独立项目 goja_nodejs 提供。每个 Runtime 实例只能被单个 goroutine 使用,在计算密集型场景下性能明显低于 V8。
核心功能
- 01实现 ECMAScript 5.1,支持正则表达式与严格模式。
- 02可在 Go 值与 JavaScript 值之间相互转换。
- 03支持从 Go 调用 JavaScript 函数,并可指定 this 值。
- 04通过自定义字段名映射器,将 Go 结构体字段和方法暴露为 JS 命名风格。
- 05可在其他 goroutine 中中断正在运行的脚本。
- 06支持 Sourcemap,并能运行 Babel 与 TypeScript 编译器。
适用场景
- 在 Go 服务中嵌入用户自定义脚本或规则。
- 在 Go 程序中运行 ES5 库或构建工具,无需 cgo。
- 用 JavaScript 驱动插件或配置系统的 Go 应用开发。
- 从 Go 侧研究或控制 JavaScript 执行环境。
标签
常见问题
- goja 是什么?
- 用纯 Go 编写的 ECMAScript 5.1 JavaScript 引擎,可将 JS 执行嵌入 Go 程序。 Goja 是完全用 Go 实现的 JavaScript 引擎,以 ECMAScript 5.1 为主要目标,大部分 ES6 特性仍在开发中。它让 Go 程序可以加载并运行 JavaScript 代码,把 Go 值传入脚本,再取回执行结果,无需 cgo,也不依赖 V8 封装。
- goja 可以免费使用吗?用的什么许可证?
- goja 以 MIT 许可证开源。用于商业产品前,请先确认许可证条款。
- goja 还在维护吗?
- 活跃维护中。goja 最近一次提交是在 2026年10月21日。
- goja 适合用来做什么?
- 在 Go 服务中嵌入用户自定义脚本或规则。 在 Go 程序中运行 ES5 库或构建工具,无需 cgo。 用 JavaScript 驱动插件或配置系统的 Go 应用开发。 从 Go 侧研究或控制 JavaScript 执行环境。
- 在哪里获取 goja?
- 源代码和安装说明在 GitHub 上:https://github.com/dop251/goja
概要由 AI 根据项目 README 生成;GitHub 数据每日更新。
相关项目
用 Rust 编写的超快速 TypeScript/JavaScript 编译器与解析器,可在 Rust 与 JavaScript 中使用。
基于 JavaScript 编写 Shell 风格脚本的工具,封装 child_process 并自动转义参数,兼容多平台。
让 Unity 和 Unreal 游戏可以用 TypeScript/JavaScript 编写逻辑的脚本解决方案,Unity 版还支持 Lua 和 Python。
跨平台的命令行 Shell、脚本语言与自动化框架,支持 Windows、Linux 和 macOS。
基于 Clang 和 LLVM 构建的交互式 C++ 解释器,提供逐行执行代码的 REPL 环境。