packagemainimport("fmt""github.com/robertkrimen/otto")funcmain(){vm:=otto.New()// 注入变量vm.Set("def",map[string]interface{}{"abc":123})// 注入方法vm.Set("Add",func(callotto.FunctionCall)otto.Value{vara,bint64a,_=call.Argument(0).ToInteger()b,_=call.Argument(1).ToInteger()val,_:=vm.ToValue(a+b)returnval})// 执行vm.Run(`
abc = Add(1,2);
console.log("The value of abc is " + abc);
console.log("The value of def is " , def.abc);
`)// 变量取值ifvalue,err:=vm.Get("abc");err==nil{ifintVal,err:=value.ToInteger();err==nil{fmt.Println(intVal)}}}
packagemainimport("fmt""github.com/dop251/goja")funcmain(){vm:=goja.New()// 返回值v,_:=vm.RunString("2+2")fmt.Println(v.Export().(int64))// 注入方法vm.Set("add",func(callgoja.FunctionCall)goja.Value{vara,bint64a=call.Argument(0).ToInteger()b=call.Argument(1).ToInteger()val:=vm.ToValue(a+b)returnval})v,_=vm.RunString(`add(1,2)`)fmt.Println(v.Export().(int64))// 导出方法vm.RunString(`
function sub(a,b) {
return a - b
}
`)sub,_:=goja.AssertFunction(vm.Get("sub"))v,_=sub(goja.Undefined(),vm.ToValue(10),vm.ToValue(1))fmt.Println(v.Export().(int64))}