文档手册

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)