Skip to main content

Go调用js代码

运行 js 代码

import (
"fmt"

"github.com/robertkrimen/otto"
)

func main() {
vm := otto.New()
result, _ := vm.Run(`
foo = 1 + 2
console.log(foo)
result = foo;
`)
fmt.Println(result) // 4
}

调用函数

func main() {
vm := otto.New()
vm.Run(`
function hello(name){
console.log('hello ' + name)
return 'OK'
}
`)

ret, _ := vm.Call("hello", nil, "wenhao")
fmt.Println(ret)
}

这里以 go 调用 js 的 CryptoJS 来实现加密演示。

func main() {
bytes, _ := ioutil.ReadFile("md5.js")
vm := otto.New()
vm.Run(string(bytes))

ret, _ := vm.Call("MD5", nil, "a123456")
fmt.Println(ret)
}

封装成 go 函数

不过这样写法不方便,可以将其封装为一个 go 函数来调用。

import (
"fmt"
"io/ioutil"

"github.com/robertkrimen/otto"
)

var vm = otto.New()

func initJs() {
bytes, _ := ioutil.ReadFile("md5.js")
vm.Run(string(bytes))
}

func md5(content string) string {
ret, err := vm.Call("MD5", nil, content)
if err != nil {
return ""
}
return ret.String()
}

func main() {
initJs()
result := md5("a123456")
fmt.Println(result)
}