【原创】使用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。

 

Wails 是一个使用 Go 编程语言创建跨平台本机应用程序的框架,它允许您使用 Go 编写前端后端代码。Wails 提供了一个简单的方式来构建具有本机外观感觉的应用程序,可以在所有主要平台上运行,包括 Windows、macOS Linux。 要使用 Wails 开发 UI 窗口,可以遵循以下步骤: 1. 安装 Wails 首先,您需要安装 Wails。您可以访问官方网站 https://wails.app/ ,根据您的操作系统选择对应的安装包进行安装。 2. 创建新项目 使用 `wails init` 命令在您的工作目录中创建新项目。该命令将生成一个基本的 Wails 项目结构。 3. 创建 UI 窗口 在项目的 `frontend` 目录下创建一个 HTML 文件,该文件将作为窗口的 UI 界面。您可以使用 HTML、CSS JavaScript 来创建您的 UI 界面。Wails 使用 Go 的 Webview 库来呈现 UI 界面。 4. 连接前端后端 在项目的 `backend` 目录下创建一个 Go 文件,该文件将作为窗口的后端处理逻辑。您可以使用 Go 编写您的业务逻辑,并将其与前端交互。Wails 提供了一些方便的方法来实现前后端之间的通信。 5. 构建应用程序 使用 `wails build` 命令构建您的应用程序。该命令将生成适用于您的操作系统架构的二进制文件。 6. 运行应用程序 使用 `./<yourapp>` 命令运行您的应用程序。您将看到一个带有本机外观感觉的 UI 界面,可以在其中与您的后端进行交互。 以上是使用 Wails 开发 UI 窗口的基本步骤。您可以使用 Wails 提供的其他功能来扩展您的应用程序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值