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
    

    第二种,从github下载之后,按如下目录放置 %GOPATH%\src\github.com\lxn\walk

    然后执行 go install github.com\lxn\walk 命令进行安装。

    二、创建项目

    1. OSSTool工具简介

    作为一个文件上传的客户端,支持两种方式上传文件

  • 快捷键直接上传
  • 拖动文件到指定区域上传
  • 软件启动后直接最小化到系统托盘,支持在托盘图标上右键打开菜单,选择进入主界面,进行秘钥配置和文件拖动上传等功能。

    2. 启动入口

    创建一个空目录ossTool,进入该目录使用 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文件运行即可