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

发布时间:2023-12-23 00:38:02

官方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方法。

文章来源:https://blog.csdn.net/weixin_41827162/article/details/135161915
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。