go与JS通信
2024-05-14 09:23:32
go调用JS函数:
//将数据发送出去 ipc.Emit("js-on-event-demo", fmt.Sprintf("Go发送的数据: %d", param0), float64(param0+10)) // 如果JS返回结果, 需要通过回调函数入参方式接收返回值 ipc.EmitAndCallback("js-on-event-demo-return", []any{fmt.Sprintf("Go发送的数据: %d", param0), float64(param0 + 10)}, func(r1 string) { //需要正确的获取类型,否则会失败 fmt.Println("JS返回数据:", r1) })
JS等待GO调用:
<script type="application/javascript"> //ipc.on函数有2个参数 //参数1 事件名 必填 string类型 //参数2 回调函数 非必填 function类型, go传递的参数 ipc.on('js-on-event-demo', function (p1, p2, p3) { writeMessage("js-on-event-demo Go传递过来的数据: " + p1 + " p2: " + p2 + " p3: " + p3) }) //带有返回值 ipc.on('js-on-event-demo-return', function (p1, p2) { writeMessage("js-on-event-demo-return-Go传递过来的数据: " + p1 + " p2: " + p2) //该返回值将返回到go中 return 'js返回的数据: ' + p1 }) </script>
JS调用go:
首先go中要定义这个函数:
// 在Go中监听一个事件, 带返回值 // 使用形参接收参数 // 在JS中入参类型必须相同 // 返回参数可以同时返回多个, 在JS接收时同样使用回调函数方式以多个入参形式接收 ipc.On("go-on-event-demo-argument-return", func(param1 int, param2 string, param3 float64, param4 bool, param5 string) string { fmt.Println("param1:", param1) fmt.Println("param2:", param2) fmt.Println("param3:", param3) fmt.Println("param4:", param4) fmt.Println("param5:", param5) return fmt.Sprintf("%d-%v-%v-%v-%v", param1, param2, param3, param4, param5) })
然后在JS中才能进行调用:
直接异步调用: ipc.emit('go-on-event-demo-argument', [100, '字符串-Energy', 1000.001, true, "字符串"]); 这里是带一个异步回调函数: ipc.emit('go-on-event-demo-argument-return', [100, '字符串-Energy', 1000.001, true, "字符串"], function (result) { writeMessage("result: " + result) }); 同步调用: let result = ipc.emitWait('go-on-event-demo-argument-return', [100, '字符串-Energy', 1000.001, true, "字符串"]); writeMessage("result: " + result)