首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >用 Go 写桌面应用?Wails 是一个不错的选择

用 Go 写桌面应用?Wails 是一个不错的选择

作者头像
技术圈
发布2026-04-17 16:41:19
发布2026-04-17 16:41:19
780
举报

你有没有遇到过这样的困扰:想用 Go 写一个带图形界面的桌面应用,却发现选择寥寥无几?用 Electron 吧,一个 Hello World 就要 50MB+,内存占用动辄几百兆;用原生开发吧,每个平台都要单独写一套代码,维护成本太高。

我来介绍一个轻量级的解决方案——Wails,它让你用 Go 写后端、用熟悉的 Web 技术写前端,打包出来的应用体积小、启动快,还能跨平台运行。

Wails 是什么?

Wails 是一个开源框架,专门为 Go 开发者设计,用于创建具有现代 Web 界面的桌面应用。它的核心思路很简单:把 Go 代码和 Web 前端打包成一个单独的二进制文件,无需内置浏览器,也不需要 Web 服务器。

与 Electron 最大的不同在于,Wails 不嵌入 Chromium,而是直接使用操作系统的原生渲染引擎:Windows 上用 WebView2,macOS 上用 WKWebView,Linux 上用 WebKitGTK。这意味着应用体积可以控制在 10MB 以内,启动速度和内存占用都大幅优于 Electron。

快速上手

安装 Wails CLI

代码语言:javascript
复制
go install github.com/wailsapp/wails/v2/cmd/wails@latest

安装完成后,运行 wails doctor 检查依赖是否齐全。Windows 需要 WebView2 运行时,macOS 需要 Xcode 命令行工具,Linux 需要 libgtk3 和 libwebkit。

创建项目

代码语言:javascript
复制
wails init -n myapp -t vue

Wails 内置了多种前端模板,包括 Svelte、React、Vue、Preact、Vanilla 等,每个都有 JavaScript 和 TypeScript 版本。

项目结构

代码语言:javascript
复制
myapp/
├── frontend/         # 前端代码
├── build/            # 构建配置和图标
├── main.go           # Go 主程序
├── wails.json        # 项目配置
└── go.mod

注意,Go 代码直接放在根目录的 main.go 中,而不是单独的 backend/ 目录。

核心概念:方法绑定

Wails 最优雅的设计是方法绑定。你只需在 Go 中定义一个结构体,把它的实例加到 Bind 选项中,Wails 就会自动生成对应的 JavaScript 调用方法。

Go 后端代码

代码语言:javascript
复制
type App struct {
    ctx context.Context
}

func (a *App) startup(ctx context.Context) {
    a.ctx = ctx
}

func (a *App) Greet(name string) string {
    return "Hello, " + name + "!"
}

main.go 中绑定:

代码语言:javascript
复制
err := wails.Run(&options.App{
    Title:  "My App",
    Width:  800,
    Height: 600,
    Bind: []interface{}{
        &App{},
    },
})

前端调用

Wails 会自动在 wailsjs/go/main/App.js 生成绑定方法,前端直接导入调用:

代码语言:javascript
复制
import { Greet } from '../wailsjs/go/main/App'

const result = await Greet('World')
console.log(result) // "Hello, World!"

整个过程不需要手写任何桥接代码,Wails 甚至会自动生成 TypeScript 类型定义,开发体验非常丝滑。

原生能力支持

除了方法绑定,Wails 还提供了丰富的运行时 API,支持原生对话框、菜单、窗口控制、事件系统、剪贴板等:

代码语言:javascript
复制
// 显示原生对话框
runtime.MessageDialog(a.ctx, runtime.MessageDialogOptions{
    Type:    runtime.InfoDialog,
    Title:   "提示",
    Message: "操作成功!",
})

这些 API 在 JavaScript 端同样可用,通过 window.runtime 访问。

Wails vs Electron

特性

Wails

Electron

后端语言

Go

JavaScript/Node.js

应用体积

小(通常 < 10MB)

大(通常 > 50MB)

内存占用

渲染引擎

原生 WebView

嵌入式 Chromium

启动速度

较慢

简单来说,如果你是 Go 开发者,想要一个轻量级的桌面应用方案,Wails 是更合适的选择;如果你需要 Node.js 生态或更复杂的后端逻辑,Electron 可能更灵活。

写在最后

Wails 为 Go 开发者打开了一扇通往桌面应用的大门。它巧妙地结合了 Go 的高性能和现代前端技术的灵活性,让你可以用熟悉的工具链构建跨平台桌面应用。

目前 Wails 在 GitHub 上已有超过 3 万星标,社区活跃,文档完善。如果你正在为 Go 应用寻找一个图形界面方案,不妨试试 Wails,从 wails init 开始,十分钟后你就能看到第一个桌面应用跑起来。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 技术圈子 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Wails 是什么?
  • 快速上手
    • 安装 Wails CLI
    • 创建项目
    • 项目结构
  • 核心概念:方法绑定
    • Go 后端代码
    • 前端调用
  • 原生能力支持
  • Wails vs Electron
  • 写在最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档