go otto v8引擎 置入对象,函数未定义问题

项目场景:

目的:通过otto虚拟机运行JavaScript代码,需要向该v8虚拟机中置入一个Go的对象,用来运算md5或其它功能。但发现置入以后一直提示TypeError: ‘md5’ is not a function。但另外一个例子中又是正常,找了很久,终于找到了原因。
Cry对象代码

type Cry struct{}

func (c *Cry) md5(str string) string {
	return crypto.Md5(str)
}

测试代码:

app_string := `
		function test(){
		console.log(Object.keys(cry));
		var a = cry.Md5("SGVsbG8sIFdvcmxkIQ==");
		console.log("a",a);
}
`
	ret_string := ""
	vm := otto.New()

	vm.Set("cry", &Cry{})
	_, err := vm.Run(app_string)
	//fmt.Println("测试", _cry.md5("123"))
	if err != nil {
		ret_string = "API加载异常:" + err.Error()
	} else {
		result, err := vm.Call("test", nil, 1, 10)
		if err != nil {
			ret_string = "调用API异常:" + err.Error()
		} else {
			ret_string, err = result.ToString()
		}
	}
	fmt.Println("结果", ret_string)

原因分析:

应该是该虚拟机对,函数名有一定的要求。一定要首字母大写


解决方案:

修改后的代码

type Cry struct{}

func (c *Cry) Md5(str string) string {
	return crypto.Md5(str)
}
`

只需要将函数名首字母大写以后就正常可以使用了!
捣鼓了几天,猝。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值