最近想写点桌面小工具,语言已经确定了用 Go
,于是把市面上常见的几个 UI
库简单对比了一下。
除了对比,也会记录一下我对它们的主观评价,便于下次使用的时候参考。
评价的目标是用于个人使用,会考虑性能、资源消耗、依赖以及上手难度等维度。性能数据只做浅度分析,场景是跑一个 Demo
用例,分析磁盘、内存、CPU的消耗情况。
项目 | 依赖 | 主要特性 | 构建 | CPU | 内存 | 磁盘 |
---|---|---|---|---|---|---|
Fyne | 无 | 跨平台、高性能、易用 | 首次慢 | low | 57M | 44M |
go-gtk3 | cgo,gtk3 | 跨平台、高性能 | 首次慢 | medium | 35M | 9.5M |
go-qt | cgo,qt | 跨平台、组件丰富 | - | - | - | - |
walk | cgo | Windows 友好、高性能 |
快 | low | 32M | 7.7M |
wails | WebView2,Nodejs,npm | 跨平台、WEB 容器 |
快 | medium | 27+60M | 9.3M |
go-sciter | Sciter | 跨平台、嵌入式 Html & CSS 渲染 |
一般 | - | - | - |
Fyne
跨平台、简洁易用、无外部依赖、开发便捷、构建较快。构建产物相比之下偏大,内存消耗偏多。
没有资源约束优先使用,安心。go-gtk3
跨平台、组件丰富。构建产物小,内存消耗少。运行时需要带上gtk
的动态库。
gtk
和qt
选一个的话,会选gtk
。go-qt
跨平台。构建产物必须带上QT
的动态库,极不友好,未做测试。
打算用这个的话干脆就直接用QT
吧。walk
Windows
平台专用,支持Windows
拖放API
。不支持跨平台。
看起来很美好,但是搞了两天发现不会用,也没啥文档,布局控制是真难。wails
跨平台、简洁易用、构建较快,类似Electron
的效果对于拥有前端技术栈的用户非常友好。运行时依赖的WebView2
消耗了大量资源,但相比Electron
会稍好一些。
包装WEB
项目的话,用这个还是不错的,社区也比较活跃。go-sciter
Html & CSS
渲染,没跑起来。
听说挺好,无奈跑不起来。
按照场景来评估,作者的选择是:一个都没选,写个小工具尺寸好几兆实在是不雅观。
老老实实用 MFC
吧,古老但轻巧。
附上一篇离线下载、安装 Visual Studio
的教程:
举个例子,自定义 MFC
(支持 C++
和 C#
)离线包是这样的:
.\VisualStudioSetup.exe ^
--layout . ^
--add Microsoft.VisualStudio.Workload.NativeDesktop ^
--add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 ^
--add Microsoft.VisualStudio.Component.VC.ATLMFC ^
--add Microsoft.VisualStudio.Component.Debugger.JustInTime ^
--add Microsoft.VisualStudio.Component.VC.CMake.Project ^
--add Microsoft.VisualStudio.Component.VC.DiagnosticTools ^
--add Microsoft.VisualStudio.Component.Vcpkg ^
--add Microsoft.VisualStudio.Component.Windows10SDK.20348 ^
--add Microsoft.VisualStudio.Workload.ManagedDesktop ^
--add Microsoft.NetCore.Component.DevelopmentTools ^
--add Microsoft.Net.ComponentGroup.4.8.DeveloperTools ^
--add Microsoft.VisualStudio.Component.DiagnosticTools ^
--lang en-US zh-CN