• go与JS通信
  • 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)