关于go:使用-Wails结合-Go-和-Web-技术轻松构建桌面应用程序

122次阅读

共计 2042 个字符,预计需要花费 6 分钟才能阅读完成。

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。

适宜状况:

  1. 开发一些简略的客户端
  2. 您曾经相熟 Golang 这门开发语言
  3. 您曾经相熟一门 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 调用即可,然而这里须要留神一下。

  1. Gin 框架须要在 wails.Run() 之前运行,否则 Gin 会导致 wails 被阻塞
  2. 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

正文完
 0