当前位置: 首页 > news >正文

【原创】使用Golang和wails开发桌面程序初探

Golang作为一个越来越流行的服务端开发语言,以 跨平台、语法简洁、高并发协程处理能力、自带GC、编译后安装包直接使用无依赖等特点越来越受到各个互联网公司的欢迎。

Golang一直以来主要都是在服务端开发领域,逐步取代蚕食了C/C++、PHP市场,以及一部分Java市场,并且逐步在越来越取代的趋势。所以,更多需要探索一下Golang与其他语言集合开发的可能性。

主流 Golang GUI 框架对比

框架渲染方式平台支持活跃度特点
FyneOpenGL全平台★★★★★现代化、轻量、Material Design
WailsWebView全平台★★★★☆Go+Web技术、打包简单
Lorca/Webview系统浏览器全平台★★★☆☆轻量级、嵌入Web视图
Gio自定义渲染全平台★★★★☆即时模式、高性能
WalkWin32 API仅Windows★★★☆☆原生Windows体验
gotk3GTK3绑定主要Linux★★★☆☆GTK原生体验
ui原生UI全平台★☆☆☆☆简单API、开发停滞
go-astilectronElectron全平台★★☆☆☆完整Electron功能
go-sciterSciter引擎全平台★★☆☆☆嵌入式HTML/CSS引擎
nucular自定义渲染全平台★★☆☆☆即时模式UI

目前风头很盛的 Tauri 也是与Rust进行了结合,但是Rust很高的学习曲线,让很多人望而却步了,Golang + wails 就是有点类似于 Rust + Tauri 的模式,基本都是类似于 Electron 的桌面端解决方案。

使用 Golang+wails 开发的桌面程序案例

Tiny-RDM是一个Redis客户端管理软件,可以运行在 Windows/MacOS/Linux 等系统,使用Golang + Wails开发完成。

软件效果:

Image

Image

软件源码结构:( gihub地址:https://github.com/tiny-craft/tiny-rdm )

Image

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

Image

安装完成以后,会在自己个人主目录下面生成对应 wails的可以执行程序:

Image

把这个可执行程序加入到全局PATH变量:(Linux和MaxOS加入到自己环境变量)

Image

检查一下自己环境是否缺乏相应的依赖:wails doctor

重点关注自己golang版本、node版本等关键信息。

Image

Wails 使用入门

首先需要初始化wails项目,帮助生成基础目录和框架:

wails init -n "Black-Wails-App" -t vue-ts --ide vscode -d ./go_wails_test

Image

其中的 -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

生成的目录结构:

Image

项目生成的目录布局:

.
├── 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

Image

访问本地浏览器内容,发现已经可以顺利显示页面了:

Image

非常方便进行调试。

想要生成直接可以执行的exe程序,可以执行:wails build

Image

Image

然后执行 go_wails_test.exe 程序后,效果类似于浏览器中显示效果,只是是个9.6MB的独立可执行程序:

Image

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代码:

Image

现在执行:wails build 看看效果 (独立程序)

Image

已经基本像模像样了,并且里面的按钮都是可点击的。

简单验证了整个开发过程,非常类似于我们常规的 前端 + 后端的开发模式,中间还有很多细节需要探索,比如前端如何调用Golang的API之类的。

总结

使用Wails框架开发跨平台桌面应用的优势与不足:

优势

  1. 1. 轻量打包:

    1. 应用体积小(可低于10MB),不依赖浏览器运行时,但内存占用与Electron类应用相近。
  2. 2. 开发高效:

    • 结合Golang后端与前端技术(如JS/HTML/CSS),支持浏览器实时调试,适合快速开发小工具。
    • 自动生成前后端绑定代码,简化数据交互(如Go结构体与JS对象转换)。
  3. 3. 灵活资源管理:

    1. 支持本地或远程资源加载,便于实现热更新。
  4. 4. 想象力很大

    1. 因为Golang的高效和简洁,可以在开发桌面端的时候,完全使用

不足

  1. 1. 性能瓶颈

    • 所有使用Webview为核心的桌面程序的通病,包括 Tauri和Electron 都存在的问题。
    • 前后端通信开销大,复杂操作(如大量数据增删)需拆分处理,易引发界面卡顿,Web前端处理能力有限,难以应对高性能需求。
  2. 2. 功能局限

    • 缺乏系统级API(如窗口监听、多窗口支持、系统菜单)。
    • 不支持导出Web版本,Go后端无法直接在浏览器运行(依赖未来WebAssembly支持),也不算大毛病,因为本质就是桌面程序
  3. 3. 生态不完善

    • 无官方插件市场,依赖有限的Go后端库和纯前端NPM插件。
    • 缺乏原生应用自更新功能(仅前端可热更新,Go部分需重新安装)。

Wails适合熟悉Golang和Web开发的开发者快速构建轻量级桌面应用,但在性能、兼容性、系统集成和生态方面仍有明显短板,需权衡需求选择。随着框架迭代(如自更新、WebAssembly支持),部分问题可能得到改善。


【大模型介绍电子书】

快速揭秘DeepSeek背后的AI工作原理

要获取本书全文PDF内容,请在【黑夜路人技术】VX后台留言:“AI大模型基础” 或者 “大模型基础” 就会获得电子书的PDF。

 

相关文章:

  • 基于CT成像的肿瘤图像分类:方法与实现
  • 多级限流防止 Redis 被打爆
  • Mysql-DQL
  • Docker学习--本地镜像管理相关命令--docker rmi 命令
  • bert自然语言处理框架
  • Senseglove:在虚拟现实训练中融入真实触感
  • day19 学习笔记
  • Electron崩溃问题排查指南
  • Redis 的缓存雪崩、击穿、穿透及其解决办法
  • Docker学习--容器的root文件系统(rootfs)命令--docker diff 命令
  • 2025最新云渲染网渲100渲染农场使用方法,渲染100邀请码1a12
  • HTTPS通信的加密问题
  • Groovy 规则执行器,加载到缓存
  • Minio集群部署
  • 大数据在金融服务中的中阶应用:从洞察到决策的技术进阶
  • 蓝桥杯 2023 省赛 B 组 I 题 - 景区导游题解(LCA最近公共祖先)
  • 水下成像机理分析
  • 输电线路在线监测通信规约,即I1协议
  • 医院信息系统建设:大数据平台、集成平台、数据治理平台,该如何选择?
  • 常用shell命令
  • 特朗普加征关税冲击波:美国零售、汽车、航空、科技企业纷纷预警业绩波动
  • “乐购浦东”消费券明起发放,多个商家同期推出折扣促销活动
  • 丁俊晖连续7年止步世锦赛16强,中国军团到了接棒的时候
  • 大理杨徐邱再审上诉案宣判:驳回上诉,维持再审一审判决
  • 国家能源局:支持民营企业参股投资核电项目
  • 人社部:对个人加大就业补贴支持,对企业加大扩岗支持