Go GUI golang基于go-astilectron打包Win,MacOs,Linux 可执行程序

Go GUI golang基于go-astilectron打包Win,MacOs,Linux 可执行程序

远航
2022-08-19 / 2 评论 / 611 阅读 / 正在检测是否收录...

目录结构
go_gui_basic_binding     项目根目录
├─app                    你写代码的目录
│  ├─bindHandle          go方法声明javaScript方法名目录
│  │  ├─bind.go          go方法声明javaScript方法名文件
│  │
│  ├─function            绑定到javaScript的方法目录
│     ├─func.go          绑定到javaScript的方法文件
│
├─config                 配置文件命令
│  ├─config.toml         配置文件,参考goFrame文档
│
├─database               数据文件目录
│  ├─db                  我使用sqlite数据库,存放数据库文件
│
├─frame                  做了简单的封装,符合自己的使用习惯
│
├─output                 打包后的可执行文件目录
│
├─resources              静态文件目录
│  ├─app                 模板文件目录,界面文件
│  │  ├─static
│  │     ├─js
│  │       ├─app.js      基础通讯函数
│  │       ├─func.js     提供给go的方法
│  │  
│  ├─icon.*              win,mac,linux端的图标
│
├─main.go                南天门
│
│
创建主页面:./resources/app/index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="static/lib/font-awesome-4.7.0/css/font-awesome.min.css">
    <link rel="stylesheet" href="static/lib/layui/css/layui.css">
</head>
<body>
<div id="test">

</div>
<script src="static/lib/layui/layui.all.js"></script>
<script src="static/js/func.js"></script>
<script src="static/js/app.js"></script>
<script type="module">
    // 引入func.js和app.js
    // 其他的按个人需要,可以引入VUE,jq,layui等 非常银杏

    // 按个人需求初始化对应类库,我这里需要jq就声明了个$方便在func.js里使用
    layui.use(['jquery'], function(){
        $ = layui.jquery;
    });
    // 初始化app
    app.init(function (data) {
        console.log(data)
    },function () {
        // 初始化完成
        app.goFunc("test","测试调用go方法")
    });
    // 初始化完成可以在任何地方调用
    // 比如
    app.goFunc("go绑定的方法名", '传递给go的参数')
</script>
</body>
</html>
绑定主页
// 是否开启浏览器控制台
app.Debug = true
initData := app.BaseStruct{
    Asset:         Asset,
    AssetDir:      AssetDir,
    RestoreAssets: RestoreAssets,
}
// 在main.go内绑定入口界面文件
ws := &astilectron.WindowOptions{
    BackgroundColor: astikit.StrPtr("#fff"),
    Center:          astikit.BoolPtr(true),
    // 窗口名称
    Title: astikit.StrPtr("主窗口"),
    // 启动窗口宽度
    Width: astikit.IntPtr(700),
    // 启动窗口高度
    Height: astikit.IntPtr(700),
}
// 入口界面 我们刚刚创建index.html就填index
app.Run("index", ws, initData)
启动程序
  1. 想换图标的自己转icns 图片转icns
  2. 转换格式不对图标不会生效,不行的换个工具转
  3. 下载编译工具 搞不定的自己恶补go mod
go get -u github.com/asticode/go-astilectron-bundler/...

go install github.com/asticode/go-astilectron-bundler/astilectron-bundler
  1. Mac端使命令生效,win自己配置环境变量
export PATH=$PATH:$GOPATH/bin
  1. 调试
  2. 执行编译命令,这个时候会下载浏览器
  3. 不能科学上网就复制地址去浏览器下载或者去 阿里镜像 下载
  4. 直接ctrl+f搜索名字,你肉眼找不到的
  5. 下载地址和下载后的文件名和目录在控制台都能看到
  6. 下载好改名字放到对应目录重新执行编译命令
  7. 如果还在下载那就是你目录或者文件名没对
  8. 这个问题和作者大大反映了,看作者心情修复
  9. 哪个正经程序员不会科学上网啊 表情
// 编译
astilectron-bundler bd
// 启动,win的cmd不支持*通配符,正经人谁用cmd,换一个吧
go run *.go
  1. 基础命令,提示命令不存在就重新执行上面的步骤
astilectron-bundler    // 打包当前系统软件
astilectron-bundler -l // 打包Linux系统软件
astilectron-bundler -d // 打包MacOs系统软件
astilectron-bundler -w // 打包windows系统软件
astilectron-bundler -h // 查看命令
基础用法:编写提供给js的go方法
// ./app/function/finc.go 文件内编写
func Message(key string)  {
    fmt.Println("js调用了go的Message")
}
// 绑定到js ./app/bindHandle/bind.go 文件内编写
func Init()  {
    // 绑定刚刚写的Message方法
    // bind.Bind("js使用的key",方法)
    bind.Bind("Message",function.Message)
}
// js端调用
<script type="module">
    // 初始化app
    app.init(function (data) {
        console.log(data)
    },function () {
        // 初始化完成 调用go方法
        app.goFunc("Message","传递给go的参数")
    });
    // 初始化完成可以在任何地方调用
    // 比如
    app.goFunc("Message", '传递给go的参数')
</script>
// 注意事项 go在接收int参数的时候,js传递'1'是无法接收到的,注意类型
// 建议string
基础用法:编写提供给go的js方法
// ./resources/app/static/js/finc.js 文件内编写
function test(aaa) {
    console.log("调用js 方法成功")
    console.log(aaa)
}
// go端调用
// bind.JsFunc("方法名", "参数","窗口名称,默认主页")
bind.JsFunc("test", "测试调用js方法")
基础用法:创建新窗口 - go端
windows.Create("模板名称,不用.html", "窗口名称", 窗口参数, 是否打开浏览器控制台)
_, _ = windows.Create("bb", "tips", &astilectron.WindowOptions{
    Height: astikit.IntPtr(300),
    Width:  astikit.IntPtr(300),
    Title:  astikit.StrPtr("子窗口"),
}, true)
基础用法:日志输出 - go端
// 输出日志到浏览器控制台
log.Log("调用go方法成功")
log.Error()
没了没了
1

评论 (2)

取消
  1. 头像
    如梦初醒
    MacOS · Google Chrome

    怎么科学上网表情

    回复
    1. 头像
      远航 作者
      Windows 7 · Google Chrome
      @ 如梦初醒

      就是很科学的上网表情

      回复