# 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()
```
> 没了没了