完全用 Go 编写的 JS 引擎

科技   2024-11-03 19:30   四川  

大家好,又见面了,我是 GitHub 精选君!

背景介绍

随着互联网技术的迅猛发展,JavaScript 已经成为几乎所有现代网页和应用开发中不可或缺的组成部分。但是,JavaScript 的执行环境通常局限于浏览器或者 Node.js,这为那些希望在不同环境下运行 JavaScript 代码的开发者带来了限制。特别是在 Go 语言环境中,开发者面临着将 JavaScript 与 Go 通信的挑战,因为二者运行时不一致可能导致性能下降和开发效率降低。此外,对于需要在 Go 环境中执行 JavaScript 代码的场景,找到一个性能优异且易于集成的 JavaScript 引擎是极具挑战性的。

今天要给大家推荐一个 GitHub 开源项目 goja,该项目在 GitHub 有超过 5.5k Star。

一句话介绍该项目:ECMAScript/JavaScript engine in pure Go

项目介绍

Goja 是一个完全用 Go 编写的 ECMAScript 5.1/JavaScript 引擎,它侧重于标准遵从性和性能。Goja 使得开发者能够在纯 Go 项目中执行 JavaScript 代码,以此来解决 Go 和 JavaScript 间的通信难题。

该项目由 otto 启发,但在执行效率和 ES5.1 特性支持上做了大量的提升和完善。Goja 不仅支持 ECMAScript 5.1 标准,包括正则表达式和严格模式,还实现了部分 ES6 的功能,并且正在努力实现对更多 ES6 功能的支持。此外,Goja 还支持 sourcemaps,能够运行 Babel、TypeScript 编译器等 ES5 编写的工具。

如何使用

首先需要确保你的环境中已安装 Go 1.20 或更高版本。然后,通过以下 Go 命令安装 Goja:

go get github.com/dop251/goja

安装完成后,你可以开始在项目中使用 Goja 来执行 JavaScript 代码了。下面是一个简单的示例,展示如何执行一段 JavaScript 代码并获取结果:

const SCRIPT =`
function sum(a, b) {
    return +a + b;
}
`


vm := goja.New()
_, err := vm.RunString(SCRIPT)
if err !=nil{
  panic(err)
}
sum, ok := goja.AssertFunction(vm.Get("sum"))
if!ok {
  panic("Not a function")
}

res, err := sum(goja.Undefined(), vm.ToValue(40), vm.ToValue(2))
if err !=nil{
  panic(err)
}
fmt.Println(res)
// Output: 42

项目推介

Goja 项目适用于需要在 Go 环境下执行 JavaScript 代码的各种场景,比如用作脚本引擎、实现动态功能等。由于是纯 Go 实现,Goja 避免了 cgo 的依赖和开销,使得构建和跨平台部署变得更加简单,无论是在 Linux、Windows 还是 MacOS 系统上。此外,Goja 正在积极地实现部分 ES6 功能,对于追求新技术的开发者来说,使用 Goja 将使你始终站在技术的前沿。

以下是该项目 Star 趋势图(代表项目的活跃程度):

更多项目详情请查看如下链接。

开源项目地址:https://github.com/dop251/goja

开源项目作者:dop251

关注我们,一起探索有意思的开源项目。

点击如下卡片后台回复:加群与技术极客们一起交流人工智能、开源项目,一起成长。如果你正在寻求开源项目推广、DevOps、AIGC 大模型、软件开发等领域的付费服务,可参考推文了解详情。

读者专属插件:github.com/ZhuPeng/github_linker

GitHub精选
分享 GitHub 上有意思的开源项目和人。
 最新文章