一日一技:在 Golang 中运行 JavaScript
我们知道,在 Python 里面,如果你要运行一段 JavaScript,你可以使用execJS
这种第三方库。那么在 Golang 里面,你想运行 JavaScript 的时候又应该怎么办呢?
最近我发现一个使用 Golang 开发的 JavaScript 引擎:Goja。它实现了ES 5.1
的所有语法和大部分的ES 6
语法,比 Python 的execJS
要厉害得多。在一定程度上和特定场景下,它可以完全替代Chrome 的 V8引擎。
我们来看看如使用它运行一段 JavaScript 代码。首先,我来写一段递归版的 JavaScript 代码计算斐波那契数列:
1 | function fib(n) { |
直接在浏览器上面运行的效果如下:
现在,我们来安装这个Goja
:
1 | go get github.com/dop251/goja |
接下来我们在 Go 中运行 js 代码:
1 | package main |
运行效果如下图所示:
我们来解释一下上面代码的意思。请大家关注截图中的代码行号。第19行,我们创建了一个 JavaScript 的虚拟机。然后在第20行,把这个函数加载到了虚拟机当中。
第25行,我们创建了一个变量,这个变量是函数类型,这个函数接收一个 int32
作为参数,并返回另一个int32
类型的数据。
第26行,我们把 Golang 里面的这个函数变量与 JavaScript 里面的函数fib
关联起来,这样我们就能直接写 Go 代码来调用 JavaScript 代码了。
第31行,我们像调用普通的 Go 函数一样传入参数,然后获得结果。
有一些同学在做爬虫的时候,需要运行一段 JavaScript 代码来生成一段 token,那你不妨试一试Goja
,它的速度肯定要比你用Python 版本的快很多。