我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何在Golang中运行JavaScript

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何在Golang中运行JavaScript

我们知道,在 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 main

import (
    "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) int32
    err = 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 版本的快很多。

参考文献

[1] Goja: https://github.com/dop251/goja

总结

到此这篇关于如何在Golang中运行JavaScript的文章就介绍到这了,更多相关Golang中运行JavaScript内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何在Golang中运行JavaScript

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

javaweb在eclipse中如何运行

要在Eclipse中运行Java Web项目,您需要按照以下步骤进行操作:1. 确保您已经安装了Java Development Kit(JDK)和Eclipse IDE。2. 在Eclipse中创建一个新的Dynamic Web Proj
2023-09-22

如何在Docker中运行K3s

本篇文章给大家分享的是有关如何在Docker中运行K3s,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。什么是k3d?k3d是一个小型程序,用于在Docker中运行K3s集群。
2023-06-15

如何运行javascript代码

Javascript是一种非常流行的编程语言,在网页开发和动态交互方面被广泛应用。本文将介绍如何在不同的环境中运行Javascript代码,包括浏览器、Node.js和命令行界面。一、在浏览器中运行Javascript代码在浏览器中运行Javascript代码是最常见的应用场景。一般来说,可以通过以下两种方式来运行Javascript代码。1. 内嵌式在HTML文件中,可以通过
2023-05-14

如何运行javascript脚本

这期内容当中小编将会给大家带来有关如何运行javascript脚本,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。javascript脚本的运行方法:首先在文本输入js脚本,点击文件的另存为;然后选择文件保
2023-06-14

Jupyter Notebook如何运行JavaScript

这篇文章主要介绍Jupyter Notebook如何运行JavaScript,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!安装 Anaconda安装部分我是直接使用 Anaconda 安装的,这个下载 msi 就可以
2023-06-15

Javascript是如何运行的?在哪里启动?

Javascript在哪启动Javascript是一门常用的编程语言,它可以在网页中实现交互性的功能,例如表单验证、页面渲染等等。那么,Javascript是如何运行的呢?它在哪里启动?首先,我们需要知道Javascript是一门客户端脚本语言,也就是说,它是在用户的浏览器中运行的。当用户打开网页时,浏览器会自动下载网页中的Javascript代码,并在用户与网页进行交互过程中
2023-05-14

如何在 Golang 中启动另一个正在运行的程序实例?

来到编程网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《如何在 Golang 中启动另一个正在运行的程序实例?》,介绍一下,希望对大家的知识积累有所帮助,助力实战开发!问题内容我希望 G
如何在 Golang 中启动另一个正在运行的程序实例?
2024-04-04

如何在Linux中运行jar包

这期内容当中小编将会给大家带来有关如何在Linux中运行jar包,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。什么是Linux系统Linux是一种免费使用和自由传播的类UNIX操作系统,是一个基于POSI
2023-06-10

Java Main如何在maven中运行

本篇文章为大家展示了Java Main如何在maven中运行,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、从命令行运行1、运行前先编译代码,exec:java不会自动编译代码,你需要手动执行mv
2023-05-31

javascript只能在浏览器中运行

JavaScript是一种高级编程语言,常用于Web开发中。它是一种脚本语言,可以在网页中添加动态功能或特效,例如通过移动鼠标改变图像大小,或者可以向表单添加交互式验证等等。因此,人们常常误以为JavaScript只能在浏览器中运行。然而,事实上,JavaScript可以在多个平台上运行,如移动设备、桌面应用程序和服务器端等。首先,我们需要知道JavaScript是一种解释型语
2023-05-14

JavaScript在网站中的运行分析

这期内容当中小编将会给大家带来有关JavaScript在网站中的运行分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。JavaScript 是因特网上最流行的脚本语言,并且可在所有主要的浏览器中运行,比方
2023-06-12

Sublime Text内运行如何javascript

小编给大家分享一下Sublime Text内运行如何javascript,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Sublime Text内运行javascr
2023-06-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录