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

如何在 Golang 中運行 JavaScript

開發 前端
我們知道,在 Python 里面,如果你要運行一段 JavaScript,你可以使用execJS這種第三方庫。那么在 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 版本的快很多。

來源鏈接:

??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??

責任編輯:趙寧寧 來源: 未聞Code
相關推薦

2020-10-27 18:45:45

GolangGraphQ開發

2024-11-12 08:00:00

LSM樹GolangMemTable

2021-03-11 23:43:20

JavaScript數組開發

2021-03-18 10:45:02

JavaScript數組運算符

2024-10-22 15:10:49

2013-04-09 09:38:02

2011-03-21 12:41:41

JavaScript

2013-05-14 10:53:43

2021-09-16 17:38:49

UbuntuLinuxJava

2018-10-11 09:40:53

前端JavaScript編程語言

2022-10-08 11:39:56

斷路器Golang項目

2022-03-15 07:55:09

JavaScript線性儀表圖開發

2015-07-06 09:59:56

JavaScript私有成員

2022-09-12 23:53:53

JavaScript條件判斷開發

2021-03-29 08:01:20

JavaScript數據結構

2024-07-30 08:00:00

Kubernetes數據庫

2020-02-24 10:39:55

Python函數線程池

2022-01-05 18:19:30

容器鏡像Golang

2024-04-11 08:30:05

JavaScript數組函數

2020-11-26 08:12:24

JavaScript對象數組
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品久久不卡 | 九九久久久 | 天天曰天天曰 | 国产区视频在线观看 | 99视频免费在线 | 国产精品综合色区在线观看 | 一级黄色片毛片 | 女人天堂av| 中文字幕日韩欧美一区二区三区 | 欧美日韩在线成人 | 成人小视频在线观看 | 91精品久久 | 精品国产亚洲一区二区三区大结局 | 中文字幕国 | 精品免费在线 | www.一级毛片 | 免费视频一区二区 | 视频在线亚洲 | 欧美日韩亚 | 国产日韩欧美中文 | 超碰免费在线观看 | 国户精品久久久久久久久久久不卡 | 狠狠操网站 | 91精品国产乱码久久久久久久久 | 精品一区二区久久久久久久网站 | 国产视频三级 | 精品毛片 | 91精品国产高清一区二区三区 | 激情毛片 | 中国大陆高清aⅴ毛片 | 天天澡天天狠天天天做 | 国产你懂的在线观看 | 日韩一区二区三区在线视频 | 欧美一区二区三区在线看 | 国产精品一区二区三 | 国产高清视频 | 久久国产精品-国产精品 | 国产欧美一区二区三区在线看 | 日本精品视频 | 色橹橹欧美在线观看视频高清 | 亚洲第1页|