
腾讯工蜂
腾讯新一代高效研发管理解决方案,提供代码托管与协作。
使用 Go 构建漂亮的跨平台桌面应用程序
Wails 是一个用于构建桌面应用程序的开源框架,核心思路是让开发者使用 Go 语言编写后端逻辑,同时结合熟悉的前端技术栈来构建用户界面。它定位明确:面向已经掌握 Go 或希望将 Go 项目快速包装为桌面应用的开发者。
与 Electron 最显著的区别在于,Wails 不打包完整的浏览器运行时。它利用操作系统自带的 WebView 组件渲染界面,因此产物体积通常比同等功能的 Electron 应用小一个数量级。
Wails 的应用架构可以概括为三层:
这种设计意味着开发者不需要手写 HTTP 服务或 WebSocket 通信来连接前后端。声明一个 Go 结构体并注册后,其公开方法即可在前端通过 window.go 对象调用,参数与返回值会自动完成 JSON 序列化与类型转换。
| 特性 | 说明 |
|---|---|
| 原生菜单与对话框 | 提供系统级菜单、文件选择、消息提示等 API |
| 编译为单一可执行文件 | 产物包含所有资源,分发简单 |
| 跨平台 | 支持 Windows、macOS、Linux |
| 热重载开发模式 | 修改前端代码后界面即时刷新,无需重新编译 |
| 多窗口支持 | 可创建和管理多个窗口实例 |
| 事件系统 | 后端可主动向前端推送事件,适用于通知、进度更新等场景 |
Wails 适合以下情况:
安装 Wails CLI 后,一条命令即可初始化项目:
go install github.com/wailsapp/wails/v2/cmd/wails@latest
wails init -n myproject
wails dev
wails dev 会启动开发服务器,前端代码变更实时反映在应用窗口中。构建发布版本则使用 wails build,默认产出针对当前平台的二进制文件。
由于依赖系统 WebView,不同平台上的渲染引擎存在差异:Windows 使用 WebView2(基于 Chromium),macOS 使用 WKWebView,Linux 通常使用 WebKitGTK。这意味着某些 CSS 特性或 JavaScript API 在不同平台上的表现可能不完全一致,开发时需要在目标平台上进行测试验证。
Wails 目前处于 v2 稳定版本,API 已趋于成熟,但生态规模与 Electron 相比仍有差距。对于需要大量第三方原生模块支持的项目,可能需要评估现有插件是否能满足需求。







