Go中調用JS代碼(otto)的實現(xiàn)示例
otto是一個Go語言實現(xiàn)的JavaScript 解釋器,它的項目地址為:https://github.com/robertkrimen/otto
Otto實現(xiàn)了 ECMAScript 5.1 的大部分功能。你可以使用 Otto 來執(zhí)行 JavaScript 代碼,甚至可以定義和調用函數(shù),操作對象等。但請注意,Otto 目前只支持 ECMAScript 5.1,不支持 ECMAScript 6 或更高版本的功能。
假如我現(xiàn)在有一個encrypt.js的文件,里面的內容為:
var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
function encodeInp(input) {
var output = "";
var chr1, chr2, chr3 = "";
var enc1, enc2, enc3, enc4 = "";
var i = 0;
do {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64
} else if (isNaN(chr3)) {
enc4 = 64
}
output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4);
chr1 = chr2 = chr3 = "";
enc1 = enc2 = enc3 = enc4 = ""
} while (i < input.length);
return output
}這個文件里有一個函數(shù)是用來加密的(其實就是一個base64),然后當我們寫爬蟲或者其他的東西時我們需要將這段代碼運行一遍,并獲取其返回的值。
那么我們在Go中就可以這樣寫:
package main
import (
"fmt"
"github.com/robertkrimen/otto"
"io/ioutil"
)
func main() {
filePath := "你的JS文件的路徑"
//先讀入文件內容
bytes, err := ioutil.ReadFile(filePath)
if err != nil {
panic(err)
}
vm := otto.New()
_, err = vm.Run(string(bytes))
if err!=nil {
panic(err)
}
data := "你需要傳給JS函數(shù)的參數(shù)"
//encodeInp是JS函數(shù)的函數(shù)名
value, err := vm.Call("encodeInp", nil, data)
if err != nil {
panic(err)
}
fmt.Println(value.String())
}
然后假如你以后會經(jīng)常性的使用這段代碼的話,你也可以給它進行一個小封裝。
func JsParser(filePath string, functionName string, args... interface{}) (result string) {
//讀入文件
bytes, err := ioutil.ReadFile(filePath)
if err!=nil {
panic(err)
}
vm := otto.New()
_, err = vm.Run(string(bytes))
if err!=nil {
panic(err)
}
value, err := vm.Call(functionName, nil, args...)
if err != nil {
panic(err)
}
return value.String()
}其實otto還有很多有趣的功能,大家可以去otto的github項目里去看。
到此這篇關于Go中調用JS代碼(otto)的實現(xiàn)示例的文章就介紹到這了,更多相關Go調用JS代碼內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Go?Gin框架優(yōu)雅重啟和停止實現(xiàn)方法示例
Web應用程序中,有時需要重啟或停止服務器,無論是因為更新代碼還是進行例行維護,這時需要保證應用程序的可用性和數(shù)據(jù)的一致性,就需要優(yōu)雅地關閉和重啟應用程序,即不丟失正在處理的請求和不拒絕新的請求,本文將詳解如何在Go語言中使用Gin這個框架實現(xiàn)優(yōu)雅的重啟停止2024-01-01
Go語言結合正則表達式實現(xiàn)高效獲取數(shù)據(jù)
這篇文章主要為大家詳細介紹了Go語言如何結合正則表達式實現(xiàn)高效獲取數(shù)據(jù),文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2025-04-04

