Golang Walk 开发 Windows GUI 应用,Hello World 示例

更新日期: 2025-07-29 阅读次数: 88 字数: 954 分类: golang

想开发一个简单的 Windows GUI 应用,实现证书图片的批量生成功能。

选择 Golang 开发 Windows GUI 的原因

尝试了一圈 WPF, React Native for Windows, 我感觉还是 Golang 开发更顺手一些。 不常写 C#,一段时间不写,语法就忘了。

而且这个证书图片的生成功能,我已经用 Golang Gin 实现了一套服务端的接口。 现在只需要把这部分代码移植到 Windows GUI 上就可以了。

使用 Golang Walk 库

也调研了其他的 Golang GUI 库:

  • Fyne:依赖较多,而且我运行不起来
  • Wails: WebView2 的方案,但我接受不了还有 Node JS 依赖
  • gtk3: 需要额外安装 gtk3 库

后来我转头一想,为何不能用 Golang 直接调用 Win32 API 呢?于是我找到了 Walk 库。

安装非常简单,立马就能运行起来,简单易上手。

下面演示一下如何实现一个 Hello World 的 GUI 应用。

Hello World 示例

参考,官方 github 上的示例代码,新建一个 main.go 文件:

package main

import (
	"strings"

	"github.com/lxn/walk"
	. "github.com/lxn/walk/declarative"
)

func main() {
	var inTE, outTE *walk.TextEdit

	MainWindow{
		Title:   "Hello World",
		MinSize: Size{600, 400},
		Layout:  VBox{},
		Children: []Widget{
			HSplitter{
				Children: []Widget{
					TextEdit{AssignTo: &inTE},
					TextEdit{AssignTo: &outTE, ReadOnly: true},
				},
			},
			PushButton{
				Text: "SCREAM",
				OnClicked: func() {
					outTE.SetText(strings.ToUpper(inTE.Text()))
				},
			},
		},
	}.Run()
}

初始化项目

go mod init go_gui_cert
go mod tidy

Manifest 文件

创建一个 main.manifest 文件,命名为 main.manifest,内容如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <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>
    <application xmlns="urn:schemas-microsoft-com:asm.v3">
        <windowsSettings>
            <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2, PerMonitor</dpiAwareness>
            <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">True</dpiAware>
        </windowsSettings>
    </application>
</assembly>

因为 Walk 库使用了 Windows Common Controls 6.0,所以需要这个 Manifest 文件。

Common Controls(通用控件) 是微软 Windows 系统提供的一套标准化 GUI 组件库,包含了一系列常用的界面元素,用于简化 Windows 应用程序的开发,确保不同程序在界面风格和交互逻辑上保持一致性。

主要特点:

  • 标准化组件:提供了按钮、列表视图、树状视图、进度条、滑块、标签页、日期选择器等常见控件,开发者无需重复开发这些基础元素。
  • 系统级支持:作为 Windows 系统的一部分(主要通过 comctl32.dll 动态链接库实现),这些控件与系统深度集成,能自动适配 Windows 的视觉风格(如 XP、Vista、Win10/11 的主题)。
  • 版本演进:随着 Windows 系统更新,Common Controls 也在迭代,例如从早期的版本 1.0 到后来的版本 6.0(支持更现代的视觉样式)。

编译 manifest 文件

需要先安装 rsrc 工具:

rsrc - Tool for embedding binary resources in Go programs.

rsrc 是一个用于将二进制资源嵌入到 Go 程序中的工具。 它可以将资源文件(如图标、字符串表、版本信息等)转换为 Go 可用的格式,并生成相应的 Go 代码或二进制文件。

go install github.com/akavel/rsrc

编译:

rsrc -manifest main.manifest -o rsrc.syso

编译运行

go build -ldflags="-H windowsgui"

后面的参数是为了不显示 cmd 控制台窗口。编译速度非常快,秒完成。👍

这时候,就会看到生成了一个 exe 文件,双击运行就可以看到一个简单的 GUI 界面。

界面效果

Golang Walk Hello World 界面

项目目录结构

 305 Jul 29 08:45 go.mod
1.0K Jul 29 08:45 go.sum
7.3M Jul 29 10:12 go_gui_cert.exe
 553 Jul 29 10:12 main.go
 889 Jul 29 08:45 main.manifest
1.1K Jul 29 08:46 rsrc.syso

生成的 exe 文件大约 7.3M,文件大小完全可以接受。

换台电脑运行

把生成的 exe 文件拷贝到其他 Windows 电脑上运行,发现可以正常运行。

只需要一个 exe 文件即可,不需要额外的依赖。两个系统均是 Windows 11。

完美!

微信关注我哦 👍

大象工具微信公众号

我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式