完全用 Go 編寫的 JS 引擎
背景介紹
隨着互聯網技術的迅猛發展,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
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/mxOGBR_fbRsWbyl4ccamIQ