JavaScript Golang 中运转 如何在

  • 电脑网络维修
  • 2024-11-14

咱们知道,在 Python 外面,假设你要运转一段 JavaScript,你可以经常使用execJS这种第三方库。那么在 Golang 外面,你想运转JavaScript 的时刻又应该怎样办呢?

最近我发现一个经常使用 Golang 开发的 JavaScript 引擎:Goja[1]。它成功了ES 5.1的一切语法和大局部的ES 6语法,比Python 的execJS要凶猛得多。在必定水平上和特定场景下,它可以齐全代替Chrome 的 V8引擎。

咱们来看看如经常使用它运转一段 JavaScript 代码。首先,我来写一段递归版的 JavaScript 代码计算斐波那契数列:

function fib(n) {if (n === 1 || n === 2) {return 1}return fib(n - 1) + fib(n - 2)}

间接在阅读器下面运转的成果如下:

如今,咱们来装置这个Goja:

go get github.com/dop251/goja

接上去咱们在 Go 中运转 js 代码:

package mainimport ("fmt""github.com/dop251/goja")func main() {const script = `function fib(n) {if (n === 1 || n === 2) {return 1}return fib(n - 1) + fib(n - 2)}`vm := goja.New()_, err := vm.RunString(script)if err != nil {fmt.Println("JS代码有疑问!")return}var fn func(int32) int32err = vm.ExportTo(vm.Get("fib"), &fn)if err != nil {fmt.Println("Js函数映射到 Go 函数失败!")return}fmt.Println("斐波那契数列第30项的值为:", fn(30))}

运转成果如下图所示:

咱们来解释一下下面代码的意思。请大家关注截图中的代码行号。第19行,咱们创立了一个 JavaScript的虚构机。而后在第20行,把这个函数加载到了虚构机当中。

第25行,咱们创立了一个变量,这个变量是函数类型,这个函数接纳一个 int32作为参数,并前往另一个int32类型的数据。

第26行,咱们把 Golang 外面的这个函数变量与 JavaScript 外面的函数fib关联起来,这样咱们就能间接写 Go 代码来调用JavaScript 代码了。

第31行,咱们像调用普通的 Go 函数一样传入参数,而后取得结果。

有一些同窗在做爬虫的时刻,要求运转一段 JavaScript 代码来生成一段 token,那你无妨试一试Goja,它的速度必要求比你用Python版本的快很多。

  • 关注微信

本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载联系作者并注明出处:https://duobeib.com/diannaowangluoweixiu/5060.html

猜你喜欢

热门标签

洗手盆如何疏浚梗塞 洗手盆为何梗塞 iPhone提价霸占4G市场等于原价8折 明码箱怎样设置明码锁 苏泊尔电饭锅保修多久 长城画龙G8253YN彩电输入指令画面变暗疑问检修 彩星彩电解除童锁方法大全 三星笔记本培修点上海 液晶显示器花屏培修视频 燃气热水器不热水要素 热水器不上班经常出现3种处置方法 无氟空调跟有氟空调有什么区别 norltz燃气热水器售后电话 大连站和大连北站哪个离周水子机场近 热水器显示屏亮显示温度不加热 铁猫牌保险箱高效开锁技巧 科技助力安保无忧 创维8R80 汽修 a1265和c3182是什么管 为什么电热水器不能即热 标致空调为什么不冷 神舟培修笔记本培修 dell1420内存更新 青岛自来水公司培修热线电话 包头美的洗衣机全国各市售后服务预定热线号码2024年修缮点降级 创维42k08rd更新 空调为什么运转异响 热水器为何会漏水 该如何处置 什么是可以自己处置的 重庆华帝售后电话 波轮洗衣机荡涤价格 鼎新热水器 留意了!不是水平疑问! 马桶产生了这5个现象 方便 极速 邢台空调移机电话上门服务 扬子空调缺点代码e4是什么疑问 宏基4736zG可以装置W11吗 奥克斯空调培修官方 为什么突然空调滴水很多 乐视s40air刷机包 未联络视的提高方向 官网培修 格力空调售后电话 皇明太阳能电话 看尚X55液晶电视进入工厂形式和软件更新方法 燃气热水器缺点代码

热门资讯

关注我们

微信公众号