# goGUI基本绑定 **Repository Path**: voyager-hang/go_gui_basic_binding ## Basic Information - **Project Name**: goGUI基本绑定 - **Description**: 在election 的基础上进行简单封装,方便自己使用 - **Primary Language**: Go - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-08 - **Last Updated**: 2022-08-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 1. 程序基于go-astilectron感兴趣的大佬可以直接看 [go-astilectron](https://github.com/asticode/go-astilectron) 2. 基于个人渣渣程序员编码习惯做简单封装,不喜勿喷 3. go-astilectron简单功能介绍:建立了js和go之间的通讯 4. go的框架是 [gframe](https://goframe.org/) 5. 项目 [码云地址](https://gitee.com/distance_l/go_gui_basic_binding) >目录结构 ```abap 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 ```html
``` > 绑定主页 ```go // 是否开启浏览器控制台 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](https://convert.72wo.com/png-to-ico) 2. 转换格式不对图标不会生效,不行的换个工具转 3. 下载编译工具 搞不定的自己恶补go mod ```go go get -u github.com/asticode/go-astilectron-bundler/... go install github.com/asticode/go-astilectron-bundler/astilectron-bundler ``` 4. Mac端使命令生效,win自己配置环境变量 ```go export PATH=$PATH:$GOPATH/bin ``` 5. 调试 - 执行编译命令,这个时候会下载浏览器 - 不能科学上网就复制地址去浏览器下载或者去 [阿里镜像](https://npm.taobao.org/mirrors/electron) 下载 - 直接ctrl+f搜索名字,你肉眼找不到的 - 下载地址和下载后的文件名和目录在控制台都能看到 - 下载好改名字放到对应目录重新执行编译命令 - 如果还在下载那就是你目录或者文件名没对 - 这个问题和作者大大反映了,看作者心情修复 - 哪个正经程序员不会科学上网啊 ::(狗头) ```go // 编译 astilectron-bundler bd // 启动,win的cmd不支持*通配符,正经人谁用cmd,换一个吧 go run *.go ``` 6. 基础命令,提示命令不存在就重新执行上面的步骤 ```go astilectron-bundler // 打包当前系统软件 astilectron-bundler -l // 打包Linux系统软件 astilectron-bundler -d // 打包MacOs系统软件 astilectron-bundler -w // 打包windows系统软件 astilectron-bundler -h // 查看命令 ``` > 基础用法:编写提供给js的go方法 ```html // ./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端调用 // 注意事项 go在接收int参数的时候,js传递'1'是无法接收到的,注意类型 // 建议string ``` > 基础用法:编写提供给go的js方法 ```javascript // ./resources/app/static/js/finc.js 文件内编写 function test(aaa) { console.log("调用js 方法成功") console.log(aaa) } // go端调用 // bind.JsFunc("方法名", "参数","窗口名称,默认主页") bind.JsFunc("test", "测试调用js方法") ``` > 基础用法:创建新窗口 - go端 ```go windows.Create("模板名称,不用.html", "窗口名称", 窗口参数, 是否打开浏览器控制台) _, _ = windows.Create("bb", "tips", &astilectron.WindowOptions{ Height: astikit.IntPtr(300), Width: astikit.IntPtr(300), Title: astikit.StrPtr("子窗口"), }, true) ``` > 基础用法:日志输出 - go端 ```go // 输出日志到浏览器控制台 log.Log("调用go方法成功") log.Error() ``` > 没了没了