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, "kuizuo")
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)
}