当前位置: 首页 > news >正文

Wails中js调用go函数(1种go写法,2种js调用方法)

官方js调用go方法文档:https://wails.io/zh-Hans/docs/howdoesitwork

a)在app.go文件里写一个要js调用的go函数:

func (a *App) JSCallGo(data1 string) string {
        return “test”
}

b)运行 wails dev 命令,系统将会在frontend/wailsjs/go中自动生成JSCallGo函数的export对象。

c)js调用这个go方法,在js文件或vue文件或其他框架的文件中:

调用方法1(导入调用):

import {JSCallGo} from "../../wailsjs/go/main/App";

JSCallGo().then((info)=>{});

调用方法二(直接调用):

window.go.main.App.JSCallGo().then((info)=>{});

===============================================

以下用映射函数方式写调用:

app.go

// JSCallGo js调用go方法,采用“白名单+参数”机制,仅返回msg
func (a *App) JSCallGo(funcName string, data1 string, data2 string) string {return MapForJSCallGo(funcName, data1, data2)
}// MapForJSCallGo js调用go函数方法的映射白名单,采用“白名单+参数”机制,仅返回msg
func MapForJSCallGo(funcName string, data1 string, data2 string) string {log.Println("JSCallGo映射:", funcName, data1, data2)back := ""switch funcName {case "Test":log.Println("js调用go方法成功:", funcName)back = "Test:OK。data1=" + data1 + ";data2=" + data2breakcase "GetOS":back = runtime.GOOS()breakdefault:log.Println("未知的JSCallGo回调函数:", funcName)back = "Error:funcName" + funcNamebreak}return back
}

js_call_go.js

// 获取映射函数
let go_func;
try {go_func = window.go.main.App.JSCallGo;console.log("js调用go函数的映射名单:", go_func);
}catch (e) {console.log("window.JSCallGo映射函数不存在!");
}// 映射函数的实现方法
// go_func(必要映射的函数名(string), 可选参数1(string), 可选参数2(string))
const js_call_go = {Test: function (data1, data2){return go_func("Test", "", "");},GetOS: function (){return go_func("GetOS");},
};

// js调用举例
js_call_go.Test("test1", "test2").then(msg=>{
     console.log("JSCallGo-Test:", msg);
});
js_call_go.GetOS().then(info=>{
     console.log("JSCallGo-GetOS:", info);
});

映射优点:分离了Go方法,提示了js方法。

http://www.lryc.cn/news/268016.html

相关文章:

  • 【我与java的成长记】之面向对象的初步认识
  • 面试题之二HTTP和RPC的区别?
  • 初试Kafka
  • SuperMap Hi-Fi 3D SDK for Unity基础开发教程
  • Upload-lab(pass1~2)
  • Linux:查询当前进程或线程的资源使用情况
  • unityc用vs2017介绍
  • 单元测试实战
  • WebService
  • Nestjs使用log4j打印日志
  • Selenium - 自动化测试框架
  • RFID技术在汽车制造:提高生产效率、优化物流管理和增强安全性
  • git异常
  • 【C语言学习疑难杂症】第12期:如何从汇编角度深入理解y = (*--p)++这行代码(易懂版)
  • 5G阅信应用场景有哪些?
  • 使用OpenSSL生成自签名SSL/TLS证书和私钥
  • pycharm2023.2激活和新建项目,python3.12安装永久换源
  • FPGA分频电路设计(2)
  • 【三】【C语言\动态规划】珠宝的最高价值、下降路径最小和、最小路径和,三道题目深度解析
  • 爬虫工作量由小到大的思维转变---<第二十八章 Scrapy中间件说明书>
  • 从Maven初级到高级
  • orangepi--开发板配置网络SSH登录
  • 简单通讯录管理系统第4关:简单通讯录管理系统之修改通讯录用户信息
  • macOS编译ckb-next
  • 漏刻有时数据可视化Echarts组件开发(46)散点图颜色判断
  • 智能优化算法应用:基于驾驶训练算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • 【论文阅读】MCANet: Medical Image Segmentation with Multi-Scale Cross-Axis Attention
  • 机器视觉实战应用:手势、人脸、动作以及手势鼠标构建(一)
  • python作业题百度网盘,python作业答案怎么查
  • centos7.9中离线安装nginx开启ssl,arm架构