Wails 是一个我的项目,能够让您应用 Go 和 Web 技术编写桌面应用程序。它能够被视为 Go 的疾速、轻量级的 Electron 替代品。联合丰盛的古代前端,您能够应用 Go 的灵活性和弱小性能,轻松构建应用程序。
在之前发的AsBot客户端 中xiaoz正是应用Wails技术来进行开发。
Wails性能
- 原生菜单、对话框、主题和半透明
- Windows、macOS 和 linux 反对
- 内置 Svelte、React 、Preact 、Vue、Lit 和 Vanilla JS 的模板
- 从 JavaScript 轻松调用 Go 办法
- 主动将 Go 构造体转换为 TypeScript 模块
- Windows 上不须要 CGO 或内部 DLL
- 应用 Vite 的实时开发模式
- 能够轻松创立、构建和打包利用的弱小命令行工具
- 丰盛的 运行时库
- 应用 Wails 构建的应用程序兼容 Apple & Microsoft 商店
什么状况下适宜抉择Wails
提起跨平台客户端开发,就会想到Electron。Electron是跨平台客户端开发的首选,许多出名软件,如VScode和腾讯QQ的重构版,都是应用Electron开发的。然而,Electron也存在一些毛病,例如内存占用量高、应用程序体积大且须要相熟Node.js。如果您无奈容忍这些毛病,同时满足以下条件,您能够思考应用Wails。
适宜状况:
- 开发一些简略的客户端
- 您曾经相熟Golang这门开发语言
- 您曾经相熟一门Web 前端框架,比方Vue3
如果您曾经把握了上述要求,那么齐全能够应用Wails来开发跨平台客户端。但如果您不相熟上述技术栈,我不倡议抉择Wails,因为学习老本可能比Electron更高。
Wails疾速上手
xiaoz在应用Wails开发的时候,搭配的前端技术是Vue3,但Wails不仅仅是反对Vue3,包含Svelte、React等都是能够的。
环境要求:
- Go 1.18+
- NPM (Node 15+)
装置Wails的话参考帮忙文档就行了:Wails装置
开始开发
Wails我的项目创立胜利后,你就能够在frontend目录下进行前端工作的开发了。如果应用Vue3作为前端技术的话,通常还须要搭配Vue Router、Pinia、axios等JavaScript 库一起应用。
而后再选一个你相熟的Vue 3 UI组件库,比方Element Plus啥的。
参数选项
如果您须要对应用程序参数做出批改,能够在main.go
这外面进行设置,比方默认窗口大小、题目等,具体能够参考官网文档:应用程序参数
前端与后端通信
如果你在前端中想要调用Golang提供的后端办法,能够在app.go
中编写本人的办法。比方:
// 扫描文件并入库func (a *App) ScanFiles(path string) string { result := controller.Scan(path) return result}
如果前端须要调用ScanFiles()
这个办法,须要先导入:
import {ScanFiles} from "../../wailsjs/go/main/App.js"
而后再调用:
ScanFiles(path.value) .then((res)=>{ console.log(res) }) .catch((err)=>{ console.log(err) })
我集体感觉这样的调用形式写起来会很累,尤其是解决简单数据的时候。咱们也能够换一种思路和办法,通过HTTP调用的形式来通信,比方后端应用Gin作为WEB服务。
应用Gin来与前端进行通信
如果后端咱们应用Gin来提供WEB服务,那么前端只须要进行HTTP调用即可,然而这里须要留神一下。
- Gin框架须要在
wails.Run()
之前运行,否则Gin会导致wails被阻塞 - Gin须要放弃后端运行,否则也会被阻塞
Gin后盾运行应用上面的办法就行了:
go func() { r.Run(":11280") }()
打包wails
应用命令wails build
即可打包为二进制文件,咱们也能够应用wails build -upx
应用upx
来进行压缩,从而让体积更加玲珑。upx在Windows下默认可用,其它平台须要独自装置,局部状况下应用upx压缩后会出现异常,请依据理论状况抉择。
如果打包后的客户端存在异样,须要进行调试,也能够应用wails build -debug
来进行编译,这样容许您应用前端调试工具。
不反对穿插编译
Wails不反对穿插编译,也就是说您在Windows下无奈打包MacOS程序,因而xiaoz搞了一个黑苹果,见:如何将Intel NUC8i5BEH装置MacOS零碎:教程及教训分享,来专门打包MacOS利用。
结语
Wails的呈现让咱们在开发跨平台客户端时,多了一个抉择。Wails更适宜开发一些较为简单的客户端程序。如果您不相熟Golang,且对体积大小等因素不在意,兴许Electron更加适合。总之,应依据本身状况和场景进行抉择。
此文章首发于我的独立博客:https://blog.xiaoz.org/archives/18615