成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何在 Golang 中運(yùn)行 JavaScript

開(kāi)發(fā) 前端
我們知道,在 Python 里面,如果你要運(yùn)行一段 JavaScript,你可以使用execJS這種第三方庫(kù)。那么在 Golang 里面,你想運(yùn)行 JavaScript 的時(shí)候又應(yīng)該怎么辦呢?

我們知道,在 Python 里面,如果你要運(yùn)行一段 JavaScript,你可以使用execJS這種第三方庫(kù)。那么在 Golang 里面,你想運(yùn)行 JavaScript 的時(shí)候又應(yīng)該怎么辦呢?

最近我發(fā)現(xiàn)一個(gè)使用 Golang 開(kāi)發(fā)的 JavaScript 引擎:Goja[1]。它實(shí)現(xiàn)了ES 5.1的所有語(yǔ)法和大部分的ES 6語(yǔ)法,比 Python 的execJS要厲害得多。在一定程度上和特定場(chǎng)景下,它可以完全替代Chrome 的 V8引擎。

我們來(lái)看看如使用它運(yùn)行一段 JavaScript 代碼。首先,我來(lái)寫(xiě)一段遞歸版的 JavaScript 代碼計(jì)算斐波那契數(shù)列:

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

直接在瀏覽器上面運(yùn)行的效果如下:

現(xiàn)在,我們來(lái)安裝這個(gè)Goja:

go get github.com/dop251/goja

接下來(lái)我們?cè)?Go 中運(yùn)行 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代碼有問(wèn)題!")
return
}
var fn func(int32) int32
err = vm.ExportTo(vm.Get("fib"), &fn)
if err != nil {
fmt.Println("Js函數(shù)映射到 Go 函數(shù)失敗!")
return
}
fmt.Println("斐波那契數(shù)列第30項(xiàng)的值為:", fn(30))
}

運(yùn)行效果如下圖所示:

我們來(lái)解釋一下上面代碼的意思。請(qǐng)大家關(guān)注截圖中的代碼行號(hào)。第19行,我們創(chuàng)建了一個(gè) JavaScript 的虛擬機(jī)。然后在第20行,把這個(gè)函數(shù)加載到了虛擬機(jī)當(dāng)中。

第25行,我們創(chuàng)建了一個(gè)變量,這個(gè)變量是函數(shù)類(lèi)型,這個(gè)函數(shù)接收一個(gè) int32作為參數(shù),并返回另一個(gè)int32類(lèi)型的數(shù)據(jù)。

第26行,我們把 Golang 里面的這個(gè)函數(shù)變量與 JavaScript 里面的函數(shù)fib關(guān)聯(lián)起來(lái),這樣我們就能直接寫(xiě) Go 代碼來(lái)調(diào)用 JavaScript 代碼了。

第31行,我們像調(diào)用普通的 Go 函數(shù)一樣傳入?yún)?shù),然后獲得結(jié)果。

有一些同學(xué)在做爬蟲(chóng)的時(shí)候,需要運(yùn)行一段 JavaScript 代碼來(lái)生成一段 token,那你不妨試一試Goja,它的速度肯定要比你用Python 版本的快很多。

來(lái)源鏈接:

??http://mp.weixin.qq.com/s?__biz=MzI2MzEwNTY3OQ==&mid=2648984382&idx=1&sn=83511845f226b84678415e137e82fc93&chksm=f25016dec5279fc8755809e1e3d7dd51d760f73a2bde8123f51b13f6c300b8de7011a9742c4d&mpshare=1&scene=23&srcid=0118l7VER7fPhaIk3wWGbNlu&sharer_sharetime=1642509422986&sharer_shareid=9603544ecd5d7f3dc66603ae089636f4#rd??

責(zé)任編輯:趙寧寧 來(lái)源: 未聞Code
相關(guān)推薦

2020-10-27 18:45:45

GolangGraphQ開(kāi)發(fā)

2024-11-12 08:00:00

LSM樹(shù)GolangMemTable

2021-03-11 23:43:20

JavaScript數(shù)組開(kāi)發(fā)

2021-03-18 10:45:02

JavaScript數(shù)組運(yùn)算符

2024-10-22 15:10:49

2013-04-09 09:38:02

2018-10-11 09:40:53

前端JavaScript編程語(yǔ)言

2011-03-21 12:41:41

JavaScript

2013-05-14 10:53:43

2021-09-16 17:38:49

UbuntuLinuxJava

2022-10-08 11:39:56

斷路器Golang項(xiàng)目

2015-07-06 09:59:56

JavaScript私有成員

2022-09-12 23:53:53

JavaScript條件判斷開(kāi)發(fā)

2021-03-29 08:01:20

JavaScript數(shù)據(jù)結(jié)構(gòu)

2024-07-30 08:00:00

Kubernetes數(shù)據(jù)庫(kù)

2020-02-24 10:39:55

Python函數(shù)線程池

2022-03-15 07:55:09

JavaScript線性?xún)x表圖開(kāi)發(fā)

2022-01-05 18:19:30

容器鏡像Golang

2018-08-13 08:47:30

KuberentesDevOpsAI

2017-02-06 18:00:26

Linuxsudo命令
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲高清一区二区三区 | 免费看a | 国产免费一区二区 | 日韩精品一区二区三区中文字幕 | 国产日韩久久 | 春色av | 日韩一区二区三区在线播放 | av超碰 | 永久免费在线观看 | 亚洲精品在线视频 | 久久久久久久综合 | 欧美一区二| 欧美成人激情 | 成人午夜在线视频 | 日韩中文字幕一区二区 | 91免费在线 | 白浆在线 | 国产精品三级久久久久久电影 | 国产久| 欧美video| 国产特黄一级 | 久久综合一区二区 | 国产精品久久一区 | 二区av| 可以在线观看av的网站 | 久久综合一区 | 国产偷自视频区视频 | 亚洲天堂精品久久 | 亚洲欧美一区二区在线观看 | 欧美高清成人 | 精品国产黄a∨片高清在线 成人区精品一区二区婷婷 日本一区二区视频 | 久久精品国产一区二区三区不卡 | 中文字幕乱码视频32 | 国产精品成人国产乱一区 | h视频免费在线观看 | 欧美一区二区三 | 国产剧情久久 | 精品国产一级 | 91精品中文字幕一区二区三区 | 91福利网| 亚洲精品一区二区三区蜜桃久 |