登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> SoftHub关联区 >> 主题: [golang/js/javascript]goja能够做什么[zt]     [回主站]     [分站链接]
[golang/js/javascript]goja能够做什么[zt]
clq
浏览(222) - 2023-03-10 13:24:53 发表 编辑

关键字:

[2023-03-10 13:26:24 最后更新]
[golang/js/javascript]goja能够做什么[zt]

goja能够做什么

goja是什么

goja实现了ECMAScript 5.1(+)

特性

1. 完整支持ECMAScript 5.1
2. 测试通过了ECMAScript官方所有测试用例
3. 支持任何能在babel, typescript编译器中运行任何ES5
4. 支持sourcemap

1
2
3
4

goja能够做什么

执行js表达式

func testExpression(){
//创建运行实例
vm := goja.New()
//运行表达式
v, _ := vm.RunString("2 + 2")
//获得结果
num := v.Export().(int64)
//打印结果
fmt.Println(num)
}

1
2
3
4
5
6
7
8
9
10

执行js脚本

func testScript(){
vm := goja.New()
registry := new(require.Registry)
registry.Enable(vm)

vm.RunString(`
var console = require('console');
var num = 2+2;
console.log(num);
`)
}

1
2
3
4
5
6
7
8
9
10
11

js调用go函数

func Test(a int, b int) int{
return a+b
}

func testCallGoFunc(){
vm := goja.New()

vm.Set("Test", Test)
v, _ := vm.RunString(`
Test(2, 2);
`)
fmt.Println(v.Export().(int64))
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14

go调用js函数

func testCallJsFunc(){
vm := goja.New()

//js函数
const SCRIPT = `
function f(a, b) {
return a+b;
}
`
vm.RunString(SCRIPT)

//声明函数变量
var fn func(int, int) string
//建立引用关系
vm.ExportTo(vm.Get("f"), &fn)
//执行并打印结果
fmt.Println(fn(2, 2))
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

go往js传递参数

func testParamFromGoToJs(){
type S struct {
Field int `json:"field"`
}

vm := goja.New()
vm.SetFieldNameMapper(goja.TagFieldNameMapper("json", true))
vm.Set("s", S{Field: 42})
res, _ := vm.RunString(`s.field`)
fmt.Println(res.Export())
}

1
2
3
4
5
6
7
8
9
10
11

go从js获取参数

func testParamGetFromJs(){
vm := goja.New()
vm.RunString(`
var num = 4;
`)

fmt.Println(vm.Get("num").Export().(int64))
}

1
2
3
4
5
6
7
8

go捕获js异常

func testCatchJsException(){
vm := goja.New()
_, err := vm.RunString(`
throw("js erorr");
`)
if jserr, ok := err.(*goja.Exception); ok {
fmt.Println(jserr)
}
}

1
2
3
4
5
6
7
8
9

js捕获go异常

var jsvm *goja.Runtime

func TestError(){
panic(jsvm.ToValue("go Error"))
}

func testCatchGoException(){
jsvm = goja.New()
jsvm.Set("TestError", TestError)

_, err := jsvm.RunString(`
try {
TestError();
} catch(e) {
if (e !== "Error") {
throw e;
}
}
`)
if jserr, ok := err.(*goja.Exception); ok {
fmt.Println(jserr)
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23





总数:0 页次:1/0 首页 尾页  
总数:0 页次:1/0 首页 尾页  


所在合集/目录



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1