Golang作为一个越来越流行的服务端开发语言,以 跨平台、语法简洁、高并发协程处理能力、自带GC、编译后安装包直接使用无依赖等特点越来越受到各个互联网公司的欢迎。
Golang一直以来主要都是在服务端开发领域,逐步取代蚕食了C/C++、PHP市场,以及一部分Java市场,并且逐步在越来越取代的趋势。所以,更多需要探索一下Golang与其他语言集合开发的可能性。
主流 Golang GUI 框架对比
框架 | 渲染方式 | 平台支持 | 活跃度 | 特点 |
Fyne | OpenGL | 全平台 | ★★★★★ | 现代化、轻量、Material Design |
Wails | WebView | 全平台 | ★★★★☆ | Go+Web技术、打包简单 |
Lorca/Webview | 系统浏览器 | 全平台 | ★★★☆☆ | 轻量级、嵌入Web视图 |
Gio | 自定义渲染 | 全平台 | ★★★★☆ | 即时模式、高性能 |
Walk | Win32 API | 仅Windows | ★★★☆☆ | 原生Windows体验 |
gotk3 | GTK3绑定 | 主要Linux | ★★★☆☆ | GTK原生体验 |
ui | 原生UI | 全平台 | ★☆☆☆☆ | 简单API、开发停滞 |
go-astilectron | Electron | 全平台 | ★★☆☆☆ | 完整Electron功能 |
go-sciter | Sciter引擎 | 全平台 | ★★☆☆☆ | 嵌入式HTML/CSS引擎 |
nucular | 自定义渲染 | 全平台 | ★★☆☆☆ | 即时模式UI |
目前风头很盛的 Tauri 也是与Rust进行了结合,但是Rust很高的学习曲线,让很多人望而却步了,Golang + wails 就是有点类似于 Rust + Tauri 的模式,基本都是类似于 Electron 的桌面端解决方案。
使用 Golang+wails 开发的桌面程序案例
Tiny-RDM是一个Redis客户端管理软件,可以运行在 Windows/MacOS/Linux 等系统,使用Golang + Wails开发完成。
软件效果:
软件源码结构:( gihub地址:https://github.com/tiny-craft/tiny-rdm )
Wails 安装
支持平台
- Windows 10/11 AMD64/ARM64
- MacOS 10.13+ AMD64
- MacOS 11.0+ ARM64
- Linux AMD64/ARM64
基础必备条件:
- Go 1.20+
- NPM (Node 15+)
直接通过go命令进行安装:
go install github.com/wailsapp/wails/v2/cmd/wails@latest
安装完成以后,会在自己个人主目录下面生成对应 wails的可以执行程序:
把这个可执行程序加入到全局PATH变量:(Linux和MaxOS加入到自己环境变量)
检查一下自己环境是否缺乏相应的依赖:wails doctor
重点关注自己golang版本、node版本等关键信息。
Wails 使用入门
首先需要初始化wails项目,帮助生成基础目录和框架:
wails init -n "Black-Wails-App" -t vue-ts --ide vscode -d ./go_wails_test
其中的 -t 参数是 template 的意思,就是使用什么框架进行界面开发,常用前端模板选项:
vanilla - 纯JavaScript
vue - Vue框架
vue-ts - Vue + TypeScript
react - React框架
react-ts - React + TypeScript
preact - Preact框架
preact-ts - Preact + TypeScript
svelte - Svelte框架
svelte-ts - Svelte + TypeScript
lit - Lit框架
solid - SolidJS框架
如果需要它生成相应的IDE配置文件,常用IDE选项
vscode - Visual Studio Code
goland - GoLand
intellij - IntelliJ IDEA
生成的目录结构:
项目生成的目录布局:
.
├── build/
│ ├── appicon.png
│ ├── darwin/
│ └── windows/
├── frontend/
├── go.mod
├── go.sum
├── main.go
└── wails.json
/main.go - 主应用程序
/frontend/ - 前端项目文件
/build/ - 项目构建目录
/build/appicon.png - 应用程序图标
/build/darwin/ - Mac 特定的项目文件
/build/windows/ - Windows 特定的项目文件
/wails.json - 项目配置
/go.mod - Go 模块文件
/go.sum - Go 模块校验和文件
frontend 目录没有针对 Wails 的特定内容,可以是你选择的任何前端项目。
build 目录在构建过程中使用。这些文件可能会更新以自定义你的构建。如果从构建目录中删除文件,将重新生成默认版本。
go.mod 中的默认模块名称为“changeme”。你应该将其更改为更合适的名称。
如果想要在浏览器中直接调试,可以执行:wails dev
访问本地浏览器内容,发现已经可以顺利显示页面了:
非常方便进行调试。
想要生成直接可以执行的exe程序,可以执行:wails build
然后执行 go_wails_test.exe 程序后,效果类似于浏览器中显示效果,只是是个9.6MB的独立可执行程序:
Wails 自我开发
上面只是默认的状态,如果想要进行真的项目开发,比如把前台模型进行变化等。
假设我们要做一个:黑夜路人的AI工具箱的项目,那么可以按照如下进行开发。
修改前端首页:go_wails_test\frontend\index.html
<!DOCTYPE html>
- <html lang="en">
+ <html lang="zh-CN">
<head>
<meta charset="UTF-8"/>
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
- <title>Black-Wails-App</title>
+ <title>黑夜路人的AI工具箱</title>
</head>
<body>
<div id="app"></div>
<script src="./src/main.ts" type="module"></script>
</body>
</html>
然后进行一些其他的修改,包括前端依赖包的修改:package.json (注意这些依赖需要使用 npm install 安装)
{
"name": "frontend",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vue-tsc --noEmit && vite build",
"preview": "vite preview"
},
"dependencies": {
"vue": "^3.2.37",
"@vueuse/core": "^10.7.0",
"vue-router": "^4.2.5"
},
"devDependencies": {
"@vitejs/plugin-vue": "^3.0.3",
"typescript": "^4.6.4",
"vite": "^3.0.7",
"vue-tsc": "^1.8.27",
"@babel/types": "^7.18.10",
"sass": "^1.69.5",
"@types/node": "^20.10.4"
}
}
增加了一部分前端vue代码:
现在执行:wails build 看看效果 (独立程序)
已经基本像模像样了,并且里面的按钮都是可点击的。
简单验证了整个开发过程,非常类似于我们常规的 前端 + 后端的开发模式,中间还有很多细节需要探索,比如前端如何调用Golang的API之类的。
总结
使用Wails框架开发跨平台桌面应用的优势与不足:
优势
-
1. 轻量打包:
- 应用体积小(可低于10MB),不依赖浏览器运行时,但内存占用与Electron类应用相近。
-
2. 开发高效:
- 结合Golang后端与前端技术(如JS/HTML/CSS),支持浏览器实时调试,适合快速开发小工具。
- 自动生成前后端绑定代码,简化数据交互(如Go结构体与JS对象转换)。
-
3. 灵活资源管理:
- 支持本地或远程资源加载,便于实现热更新。
-
4. 想象力很大
- 因为Golang的高效和简洁,可以在开发桌面端的时候,完全使用
不足
-
1. 性能瓶颈
- 所有使用Webview为核心的桌面程序的通病,包括 Tauri和Electron 都存在的问题。
- 前后端通信开销大,复杂操作(如大量数据增删)需拆分处理,易引发界面卡顿,Web前端处理能力有限,难以应对高性能需求。
-
2. 功能局限
- 缺乏系统级API(如窗口监听、多窗口支持、系统菜单)。
- 不支持导出Web版本,Go后端无法直接在浏览器运行(依赖未来WebAssembly支持),也不算大毛病,因为本质就是桌面程序
-
3. 生态不完善
- 无官方插件市场,依赖有限的Go后端库和纯前端NPM插件。
- 缺乏原生应用自更新功能(仅前端可热更新,Go部分需重新安装)。
Wails适合熟悉Golang和Web开发的开发者快速构建轻量级桌面应用,但在性能、兼容性、系统集成和生态方面仍有明显短板,需权衡需求选择。随着框架迭代(如自更新、WebAssembly支持),部分问题可能得到改善。
【大模型介绍电子书】
要获取本书全文PDF内容,请在【黑夜路人技术】VX后台留言:“AI大模型基础” 或者 “大模型基础” 就会获得电子书的PDF。