Walk是一个写给Golang的Window应用程序库套件,它主要用于桌面GUI的开发,但也有更多的东西。
划重点:walk是windows上的gui库,不能跨平台。 不过受益于golang语言的特性,最终打包体积很小,界面颜值也很高,如果只在windows上用用,那还是非常棒的。
walk 的项目地址: https://github.com/lxn/walk
文档地址:https://godoc.org/github.com/lxn/walk
一、 安装walk模块
默认你是个GO语言的老手,已经配置好了golang的开发环境,有了自己趁手的ide。这里我直接说怎么使用walk开发GUI程序。
在开始之前请确保你的golang版本在1.11之上
Walk官方声明 : 限只支持 golang 1.11.x 以上的版本,1.11.x以下的已经不支持了
go的依赖库有2种安装方式
- 第一种,使用go get进行安装
go get github.com/lxn/walk
%GOPATH%\src\github.com\lxn\walkgo install github.com\lxn\walk
二、创建项目
1. OSSTool工具简介
作为一个文件上传的客户端,支持两种方式上传文件
- 快捷键直接上传
- 拖动文件到指定区域上传
软件启动后直接最小化到系统托盘,支持在托盘图标上右键打开菜单,选择进入主界面,进行秘钥配置和文件拖动上传等功能。
2. 启动入口
go mod init
在项目下新建一个main.go文件,作为主函数,监听系统快捷键和生成托盘图标、监听点击事件等,main.go 内容如下:
package main
import (
"fmt"
"ossTool/views"
"github.com/MakeNowJust/hotkey"
"github.com/getlantern/systray"
)
func main() {
//RunHomeWindow(); //运行主窗口
//启动快捷键监听
go func() {
hkey := hotkey.New()
hkey.Register(hotkey.Ctrl, 'U', func() {
fmt.Println("Push Ctrl+U")
})
}()
systray.Run(views.OnReady, views.OnExit) //运行托盘菜单
}
3. 系统托盘
在系统托盘中,定义图标、标题和提示文字
systray.SetTemplateIcon(appIcon.LogoIcon, appIcon.LogoIcon)
systray.SetTitle("OssTool")
systray.SetTooltip("OssTool")
定义托盘图标的右键菜单
runWindow := systray.AddMenuItem("主界面", "Open the main window")
systray.AddSeparator()
mdCopy := systray.AddMenuItem("复制md格式", "copy for markdown")
systray.AddSeparator()
mURL := systray.AddMenuItem("文档地址", "visit the home page")
systray.AddSeparator()
mQuit := systray.AddMenuItem("退出程序", "Quit the whole app")
异步监听托盘图标的菜单项点击事件
go func() {
for {
select {
case <-runWindow.ClickedCh:
go func() {
RunHomeWindow(mw) //运行主窗口
}()
case <-mdCopy.ClickedCh:
if mdCopy.Checked() {
mdCopy.Uncheck() //取消选中
mdFlag = false
} else {
mdCopy.Check() //选中
mdFlag = true
}
case <-mURL.ClickedCh:
open.Run("https://www.cnblogs.com/ludg/")
case <-mQuit.ClickedCh:
systray.Quit() //退出托盘
return
}
}
}()
4. 主界面
菜单栏中,点击选项可配置oss的授权信息
三、安装 rsrc
代码写好后,我们直接go build打包是不行的,golang的图形exe需要依赖于manifest 清单文件才能正常运行。要把manifest嵌入exe文件中,还需要一个工具:rsrc 。
go get github.com/akavel/rsrc
四、创建 manifest 文件
main.manifest
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="SomeFunkyNameHere" type="win32"/>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>
</dependentAssembly>
</dependency>
<asmv3:application>
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
</assembly>
五、生成 rsrc.syso
rsrc -manifest main.manifest -o rsrc.syso
六、打包成exe并去掉cmd守护
go build -ldflags="-H windowsgui"
此时,打开项目下的exe文件运行即可