编程 Wails:Vue/React 写界面、Go 写逻辑,桌面产物只有 3–8MB

2026-09-09 21:27:14

Wails:Vue/React 写界面、Go 写逻辑,桌面产物只有 3–8MB

项目地址:github.com/wailsapp/wails

用 Electron 写桌面端,语法顺手和包体膨胀是同时存在的两件事:一个 Hello World 级别的安装包就能到 150–250 MB,运行内存 200MB 起步。Wails 换了一条路——界面层继续用 Vue/React/Svelte,逻辑层交给 Go,最终输出原生可执行文件。产品体积通常在 3–8MB。这个项目以 MIT 协议开源,GitHub 上目前 36k+ star。

项目简介

Wails 不内嵌 Chromium,渲染引擎直接复用系统自带的 WebView 组件:

  • Windows 使用 WebView2
  • macOS 使用 WKWebView
  • Linux 使用 WebKitGTK

前端代码与 Go 函数之间直接互调,不需要额外起 REST API 或 WebSocket。由于不附带浏览器运行时,产物是免安装的原生二进制,用户双击即用,无需安装额外依赖。

核心功能

Go 函数绑定

Go 结构体和方法可以直接暴露给前端 JavaScript 调用,反之亦可。一个结构体加上 @wails/event 标记,就能完成后端方法与前端调用之间的绑定,编译时自动生成类型安全的绑定代码。

CLI 工具链

Wails v3 的 CLI 命令前缀为 wails3

  • wails3 init:初始化项目
  • wails3 dev:启动带热重载的开发模式
  • wails3 build:打包生产级二进制文件

跨平台与原生能力

支持产出 Windows、macOS、Linux 三个平台的桌面应用,并提供原生菜单、对话框、系统托盘、剪贴板等系统级 API。

事件系统与热重载

内置事件总线,支持后端向前端推送实时数据。开发模式下,改前端代码即时刷新;改 Go 代码会自动重新编译并重连。

安装与创建项目

前置条件:Go 1.18+ 和 Node.js 15+。

安装 Wails CLI:

go install github.com/wailsapp/wails/v3/cmd/wails3@latest

用 Vue 模板创建项目并启动开发模式:

wails3 init -n myapp -t vue
cd myapp
wails3 dev

几秒后桌面窗口会拉起。修改前端代码会热更新,修改 Go 代码会触发重新编译。

代码演示:Go 函数直接给前端调用

后端定义一个结构体和方法:

type App struct{}

func (a *App) Greet(name string) string {
    return fmt.Sprintf("Hello, %s! From Go backend.", name)
}

Wails 会基于这个结构体自动生成前端的绑定代码。Vue 里直接 import 后调用:

import { Greet } from '../wailsjs/go/main/App'

Greet("World").then(result => {
    console.log(result)  // Hello, World! From Go backend.
})

不需要配置 API 端点,也不用手动序列化。

与 Electron / Tauri 的对比

三个项目的关键差异:

对比维度WailsElectronTauri
打包体积3–8 MB150–250 MB3–10 MB
内存占用极低(<50MB)高(200MB+)极低
后端语言Go(高性能,并发强)Node.jsRust(学习曲线陡)
渲染引擎系统 WebView(复用系统组件)内嵌 Chromium系统 WebView
学习门槛低(前端不变,Go 易学)极低高(需学 Rust)
原生体验原生菜单、对话框、托盘需额外插件原生

与 Electron 相比,Wails 在包体和内存上是数量级差异;与 Tauri 相比,体积、内存和渲染方案都接近,真正的分叉在后端语言——Tauri 需要 Rust,Wails 用 Go。对于已有 Web 前端背景、需要给服务配一个桌面端的团队,Go 是比 Rust 更容易跨过的门槛。

复制全文 生成海报 Wails Go 桌面应用

推荐文章

程序员茄子在线接单