官方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=" + data2
break
case "GetOS":
back = runtime.GOOS()
break
default:
log.Println("未知的JSCallGo回调函数:", funcName)
back = "Error:funcName" + funcName
break
}
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方法。