欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go中調(diào)用JS代碼(otto)的實(shí)現(xiàn)示例

 更新時(shí)間:2024年10月21日 10:03:19   作者:丶atty  
Otto是一個(gè)用Go語言實(shí)現(xiàn)的JavaScript解釋器,可用于執(zhí)行和操作JavaScript代碼,適合在Go項(xiàng)目中執(zhí)行簡(jiǎn)單的JS腳本,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

otto是一個(gè)Go語言實(shí)現(xiàn)的JavaScript 解釋器,它的項(xiàng)目地址為:https://github.com/robertkrimen/otto

Otto實(shí)現(xiàn)了 ECMAScript 5.1 的大部分功能。你可以使用 Otto 來執(zhí)行 JavaScript 代碼,甚至可以定義和調(diào)用函數(shù),操作對(duì)象等。但請(qǐng)注意,Otto 目前只支持 ECMAScript 5.1,不支持 ECMAScript 6 或更高版本的功能。

假如我現(xiàn)在有一個(gè)encrypt.js的文件,里面的內(nèi)容為:

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
}

這個(gè)文件里有一個(gè)函數(shù)是用來加密的(其實(shí)就是一個(gè)base64),然后當(dāng)我們寫爬蟲或者其他的東西時(shí)我們需要將這段代碼運(yùn)行一遍,并獲取其返回的值。

那么我們?cè)贕o中就可以這樣寫:

package main

import (
	"fmt"
	"github.com/robertkrimen/otto"
	"io/ioutil"
)

func main() {
	filePath := "你的JS文件的路徑"
	//先讀入文件內(nèi)容
	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())
}

然后假如你以后會(huì)經(jīng)常性的使用這段代碼的話,你也可以給它進(jìn)行一個(gè)小封裝。

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()
}

其實(shí)otto還有很多有趣的功能,大家可以去otto的github項(xiàng)目里去看。

到此這篇關(guān)于Go中調(diào)用JS代碼(otto)的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Go調(diào)用JS代碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang常用庫之配置文件解析庫-viper使用詳解

    golang常用庫之配置文件解析庫-viper使用詳解

    viper 配置管理解析庫,是由大神 Steve Francia 開發(fā),他在google領(lǐng)導(dǎo)著 golang 的產(chǎn)品開發(fā),他也是 gohugo.io 的創(chuàng)始人之一,命令行解析庫 cobra 開發(fā)者,這篇文章主要介紹了golang常用庫之配置文件解析庫-viper使用詳解,需要的朋友可以參考下
    2020-10-10
  • 從零封裝Gin框架及項(xiàng)目初始化教程

    從零封裝Gin框架及項(xiàng)目初始化教程

    這篇文章主要為大家介紹了從零封裝Gin框架及項(xiàng)目的初始化教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • GoLang實(shí)現(xiàn)Viper庫的封裝流程詳解

    GoLang實(shí)現(xiàn)Viper庫的封裝流程詳解

    Viper是一個(gè)用于Go語言應(yīng)用程序的配置管理庫,它提供了一種簡(jiǎn)單而靈活的方式來處理應(yīng)用程序的配置,支持多種格式的配置文件,這篇文章主要介紹了GoLang封裝Viper庫的流程,感興趣的同學(xué)可以參考下文
    2023-05-05
  • Go中的動(dòng)態(tài)速率限制有效控制流量

    Go中的動(dòng)態(tài)速率限制有效控制流量

    這篇文章主要為大家介紹了Go中的動(dòng)態(tài)速率限制有效控制流量,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • golang中package?is?not?in?GOROOT報(bào)錯(cuò)的真正解決辦法

    golang中package?is?not?in?GOROOT報(bào)錯(cuò)的真正解決辦法

    這篇文章主要給大家介紹了關(guān)于golang中package?is?not?in?GOROOT報(bào)錯(cuò)的真正解決辦法,文中通過圖文介紹的非常詳細(xì),對(duì)同樣遇到這個(gè)問題的朋友具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-03-03
  • Go pprof內(nèi)存指標(biāo)含義備忘錄及案例分析

    Go pprof內(nèi)存指標(biāo)含義備忘錄及案例分析

    這篇文章主要介紹了Go pprof內(nèi)存指標(biāo)含義備忘錄問題,小編特此把問題及案例分享到腳本之家平臺(tái)供大家學(xué)習(xí),需要的朋友可以參考下
    2020-03-03
  • Golang實(shí)現(xiàn)http server提供壓縮文件下載功能

    Golang實(shí)現(xiàn)http server提供壓縮文件下載功能

    這篇文章主要介紹了Golang實(shí)現(xiàn)http server提供壓縮文件下載功能,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Go語言包管理工具dep的安裝與使用

    Go語言包管理工具dep的安裝與使用

    godep是解決包依賴的管理工具,下面這篇文章主要給大家介紹了關(guān)于Go語言包管理工具dep的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • golang微服務(wù)框架kratos實(shí)現(xiàn)Socket.IO服務(wù)的方法

    golang微服務(wù)框架kratos實(shí)現(xiàn)Socket.IO服務(wù)的方法

    本文主要介紹了golang微服務(wù)框架kratos實(shí)現(xiàn)Socket.IO服務(wù)的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Go語言CSP并發(fā)模型goroutine及channel底層實(shí)現(xiàn)原理

    Go語言CSP并發(fā)模型goroutine及channel底層實(shí)現(xiàn)原理

    這篇文章主要為大家介紹了Go語言CSP并發(fā)模型goroutine?channel底層實(shí)現(xiàn)原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05

最新評(píng)論