龙空技术网

Golang 嵌入运行 JS、TS 语言

暗4146 793

前言:

现在兄弟们对“jsfor嵌套”大致比较关心,同学们都想要了解一些“jsfor嵌套”的相关知识。那么小编在网络上搜集了一些有关“jsfor嵌套””的相关文章,希望同学们能喜欢,同学们一起来学习一下吧!

最近,由于业务需求,我们考虑在 Go 语言中嵌入其他脚本语言以实现功能的扩展,经过一番深入的调研之后,我们最终在 Lua 和 JS 之间做出了选择,最终选择了 JS,因为 JS 更容易上手。

目前社区有 Otto、Goja、V8 三种方案,其中性能最高的是 V8,但是使用这种方案需要使用 CGO,而且不是密集计算任务,其实纯 Go 实现的 Goja 性能也不会差到哪里去,但是 Goja 只支持 ES5 语法,并且默认没有超时之类的功能,因此为了方便使用,我们基于它进行了一定程度的封装。

配置项

js.New(func(o *js.Option) { // 非必须o.Timeout = time.Minute * 3 // 脚本执行最长时间o.Dir = zfile.RealPath(".") // 脚本文件目录o.Args = map[string]interface{}{} // 传入参数o.DisabledConsole = true // 禁用控制台输出o.MaxPrograms = 1 << 10 // 最大缓存预处理脚本数量})

简单例子

package mainimport ("github.com/sohaha/zlsgo/zlog""github.com/zlsgo/js")func main() {js := js.New()res, err := js.Run([]byte(`const m = 1;m`))if err != nil {zlog.Error("执行失败", err)return}zlog.Debug("执行结果", res)}

执行 typescript 也是可以的

package mainimport ("github.com/sohaha/zlsgo/zlog""github.com/zlsgo/js")func main() {vm := js.New()res, err := vm.RunFileForMethod("./method.ts","run", "typescritp")zlog.Debug("执行结果", res, err) // hello typescritp}
// method.tsconst m = 1function run(name: string) {return `hello ${name}`}

Github:

文档:

标签: #jsfor嵌套