Skip to content
AI SI Daily
English

搜索全站

↑↓ 选择 · Enter 打开 · Esc 关闭

○ 工具介绍

mygo 上手:AI 写出来的 Go 桌面应用框架,原生 UI 和 Webview 都能用

mygo 是 EGOIST 用 Claude Opus 5.5 五周写出的 Go 桌面框架:纯 Go、不用 cgo、单个二进制约 9 MB。本文讲它是什么、怎么起步、Linux 实测结果,以及和 Wails、Tauri、Electron、Fyne 的对比。

滴滴点到实测: Debian 13 测试机,8 vCPU Xeon,15 GB 内存,go1.27.3,无 GPU 的 X11 桌面(2026-11-01)。macOS、Windows 二进制只编译、未运行。
这是一篇工具介绍:内容整理自官方网站、官方文档和 GitHub README,本站未对其做实测。功能和价格以官方页面为准,来源见文末。

中文推特上的独立开发者 @localhost_4173(低空飞行,英文号 @localhost_5173,GitHub EGOIST)在 9 月底开了个新仓库 mygo(官方写作 MyGo),定位是 Go 桌面应用框架。一个窗口既可以套系统 Webview 跑网页,也可以用 mygo 自带的自绘原生 UI(纯 Go 编写)。

这个项目五周发到 v0.7.4,944 个提交里有 778 个带 Co-authored-by: Claude 标记,由作者配合 AI agent 完成。它主打的两个特性——纯 Go 不用 cgo、任意机器交叉编译,在我们的 Linux 测试机上都跑通了。性能、Web 模式以及 macOS/Windows 上的实际运行,我们这次没测。

下文里,项目说法指 README、文档和作者帖子里的内容,我们实测指我们 2026 年 11 月 1 日自己跑出来的结果。

mygo 是什么

按 README 的说法,一个应用甚至同一个窗口里,可以混用两种界面:

  • 网页:直接调系统自带的 Webview——macOS 用 WKWebView,Linux 用 WebKitGTK,Windows 用 WebView2。架构文档写明 “no browser engine is bundled”,不打包浏览器内核。前端通过自动生成的 TypeScript 客户端调 Go。
  • 原生 UI:只用 Go 和 ui 包编写,“no HTML, no JavaScript and no webview”。底层用 Metal、Direct3D 11 或 OpenGL 绘制,没 GPU 时退回 CPU。同一套 UI 代码还能编译成 WebAssembly,在浏览器里用 WebGL 2 跑。

README 里列出的其他功能:

  • 类型安全的 IPC:mygo.Bind 和 mygo.NewEvent[T]。
  • 组件库:包含 flexbox 和 grid 布局、输入法、虚拟列表、SVG、动画、读屏支持,界面支持不开窗口直接跑测试。
  • 桌面 API:托盘、菜单、对话框、通知、全局快捷键、deep link、文件关联、媒体键。
  • 打包分发:支持打 macOS 的 app 和 dmg、Windows 安装包、deb、Arch 的 PKGBUILD、Linux 安装脚本,自带代码签名、公证,以及带签名的增量自动更新和类似 Sparkle 的更新窗口。
  • 插件:SQLite、基于 libghostty-vt 的终端、全平台的 Liquid Glass 效果、更新器、WebSocket、文件监听,外加一个供测试工具“和 agent”操控运行中应用的自动化插件。

架构文档定了几条边界:全部代码用 CGO_ENABLED=0 构建;macOS 和 Linux 通过 purego 在运行时调用系统 API,Windows 走 syscall。设计取向是 “Great DX over API parity. The API has the feel of Electron”,开发体验优先,API 手感向 Electron 靠拢。Bun 只在开发工具和 Web 模板里用,纯原生 UI 项目不需要。不支持 32 位 Windows 和 Linux。协议是 MIT。

AI 在里面写了多少

我们在提交 c971c903(2026-11-01 19:01,北京时间)拉了 git 历史做统计:

指标 数量
提交总数(首个提交 “init” 在 2026-09-26 11:49,北京时间) 944(9 月 110,10 月 817,11 月至今 17)
带 Co-authored-by: Claude… 标记的提交 778
署名任意 AI 合作者(Claude、Codex、Amp、Cursor Agent)的提交 783
作者直接是 Claude <[email protected]> 的提交 86
EGOIST 本人为作者的提交(两种邮箱写法合计) 653

大部分标记是 “Claude Opus 5.5”,少量是 “Claude Opus 5.5 (1M context)”,Codex、Amp、Cursor Agent 各出现过几次,不少提交信息还附了 Claude 会话链接。不过合作者标记只能说明 agent 参与了提交,看不出具体写了多少行代码。这组数字反映的是 AI 参与的提交频次,不等于代码占比。

作者在推上聊过不少开发细节:

  • 9 月 27 日:他说新桌面应用不再用 Rust,理由是 SSD 只有 1TB,而且 “while AI makes me code 10x faster, Rust slows down my iteration speed by 10x”(原帖)。
  • 10 月 27 日:“I created MyGo just three weeks ago… unbelievable things are happening thanks to Opus 5.5”(原帖)。按仓库记录,首个提交在 9 月 26 日,实际是四周半前。
  • 他晒过自己的 agent 分工:main agent、qa agent、review agent 全是 “claude opus 5.5”(原帖);还说“我已完全用 claude app 来管理 kero 和 mygo 的 bug fix,每小时扫一次”(原帖)。
  • 11 月 1 日:“MyGo 绕开了用 Rust 要交的那道“税”。看起来它很新,实际上确实很新,但它是我多年做桌面应用的经验,加上 AI agent 的迭代速度开发出来的。”(原帖)

开销方面,他 10 月 14 日说 “Claude Max $200 每周额度刚好够我用,基本上都是 Opus 5.5 high,在没开定时任务的情况下”(原帖),10 月 27 日又说“现在 opus 5.5 high 一周都用不完了”(原帖)。这只是他个人的使用反馈,我们没有核实,也不作为本站的价格数据。

用原生模板新建项目时,还会自动生成一份 .agents/skills/mygo-maintenance/SKILL.md,专门给 coding agent 规定维护 mygo 应用的规则。这个框架从建项之初就做好了让 agent 接手写代码的准备。

快速开始

README 要求 Go 1.27.3 以上,Web 模板另外需要装 Bun。

Web 前端:

bunx mygo-cli init my-app   # 或 npx mygo-cli init my-app
cd my-app
bun run dev

纯原生 UI:

go run github.com/egoist/mygo/cmd/mygo@latest init -template native my-app
cd my-app
go tool mygo dev

README 里的原生计数器示例:

type counter struct{ n int }

func (s *counter) view(c *ui.Context) {
	ui.Column(c).Fill().Center().Gap(12).Children(func() {
		ui.Text(c, fmt.Sprint(s.n)).FontSize(40).Bold()
		if ui.PrimaryButton(c, "Increment").Clicked() {
			s.n++
		}
	})
}

func main() {
	s := &counter{}
	mygo.App.WhenReady(func() {
		mygo.NewWindow(mygo.WindowOptions{Title: "Counter", Content: ui.View(s.view)})
	})
	if err := mygo.App.Run(); err != nil {
		log.Fatal(err)
	}
}

Web 模式则是把 Go 结构体绑定出去供前端直接调用。README 的例子里用 mygo.Bind(Greeter{}) 绑定后,前端直接从生成的 ./mygo 模块里 await Greeter.greet("Ada")。

我们在 Linux 上实际跑了什么

测试环境:Debian 13,8 vCPU,go1.27.3,无 GPU 的 X11 桌面。跑第二个测试时,Go 模块缓存有一部分已经是热的。

测试 1:交叉编译仓库里的 counter-native 示例(提交 c971c903)。执行 CGO_ENABLED=0 go build -trimpath -tags mygo_noinspector -ldflags "-s -w -X github.com/egoist/mygo.production=1",机器上没装 C 编译器,也没装其他系统的 SDK。

目标平台 耗时 二进制大小
linux/amd64 9.65 秒(含下载依赖) 9,584,903 字节
windows/amd64 10.0 秒 9,906,688 字节
darwin/arm64 10.5 秒 9,406,418 字节

我们只跑了编译出来的 Linux 版。窗口正常弹出,标题是 “Counter”,日志打出一行 “native UI draws without the GPU: there is none”(无 GPU,回退到 CPU 绘制);因为测试机没装 AT-SPI 服务,还报了一条 GTK 无障碍总线的警告。鼠标点两次 “+”、键盘按三次方向键上,计数从 0 变到 5。此时用 ps 看了一眼常驻内存,显示 45,820 KB——这只是 CPU 渲染模式下的单次读数,算不上基准测试。

测试 2:照 README 的快速开始走一遍(原生模板,已发布的 v0.7.4)。init 耗时 13.7 秒,生成了 main.go、不开窗口就能测界面的 main_test.go、mygo.json,以及前面提过的 agent skill。跑 go test 通过。接着执行 go tool mygo build,输出 “Built my-app 0.1.0 in 5.2s”,产物包含 9.6 MB 的二进制、4.3 MB 的 .deb、tar 包、PKGBUILD、安装脚本和 .desktop 文件。再跑跨平台构建 go tool mygo build -platform windows/amd64,darwin/arm64,耗时 6.5 秒,生成了 9.9 MB 的 .exe 和 9.7 MB 的 .app。因为没装 NSIS,Windows 安装包被跳过;dmg 也因为提示 “it needs macOS” 跳过。这个模板应用我们没启动。

项目说法(我们没复现):项目 CI 每次推送都会记录发布体积并更新到基准页。在 c971c903 这个提交上,counter-native 的体积分别是 Linux 9,615,040 字节、Windows 9,906,688 字节、macOS 9,390,450 字节。架构文档说计数器示例在 Linux 某个特定 4K 配置且未加载 Mesa 时占 65 到 67 MB 内存,原生窗口渲染完后会进入完全空闲状态。作者还发帖说从零构建加打包 Windows 安装程序只要 21 秒(原帖),并说布局引擎的性能测试赢了 Taffy 和 Yoga(原帖)。这两项我们都没测。

作者用 mygo 做的应用

作者已经把自己的产品线基本迁到了 mygo 上,完整列表在展示页。以下信息整理自展示页和作者推文,我们没有安装测试。

应用 是什么(据展示页) 链接
MyGo 云音乐 网易云音乐非官方客户端,原生 UI,逐字歌词、无损和 Hi-Res、播客本地转写、刘海迷你播放器。AGPL-3.0,498 星。发布帖说“下载体积仅 8MB,后台播放内存占用仅 100MB”(未证实)。 仓库、发布帖
Kero 给 coding agent 用的终端:退出后会话继续跑,侧栏显示每个 agent 的状态,agent 也能通过 CLI 操控它。MIT,1,345 星。Kero 比 mygo 出现得早,作者说 v2 是“花了一天用 MyGo 重写”的。 仓库、kero.sh、v2 发布帖
Pulse 活动监视器,支持 Mac、Windows、Linux,有每个 CPU 核心、GPU、磁盘、网络、能耗的读数,还能显示在菜单栏。没有公开仓库。 pulse.egoist.dev、帖子
Lorca “AI teammates on your computer”。10 月 8 日的帖子说正式版 Lorca 是 Swift (AppKit) 写的,“Lorca Dev is MyGo (native)”;展示页则把 Lorca 列为 mygo 原生应用。现在哪个版本用 mygo,未证实。 lorca.app、帖子
Godiff 审 Git 改动并提交的 diff 工具,评审意见可以复制给 agent。作者说是“opus 5.5 20 分钟完成”。 仓库、帖子
GoRex 仿 Superlogical 的 Rex 终端。 仓库
2048 2048 小游戏,有能在浏览器里玩的 WebAssembly 版。作者说 “Opus made this 2048 game in 5 minutes using MyGo”。 仓库、在线玩、帖子
Uma Umami 统计的菜单栏应用。 仓库

他还发过一个仿 Obsidian 笔记应用的演示,说 “Opus 5.5 one shotted this Obsidian clone in an hour with MyGo”(原帖),未作为产品正式发布。

社区里也陆续有人跟进。展示页列出了 MixMusic(YouTube Music 和 Spotify 播放器)、echoVic 用 Web 模式做的四款主要面向 macOS 的应用(留白、Clipnest、Cleanzo、小海底)、Git 客户端 MyTwig、AI 邮件客户端 Godwit,以及 Video-Downloader、Lumilo、Tomoru。我们还在 GitHub 上搜到一个没上展示页的 meiro,基于 mygo v0.7.2 写的 YouTube Music 客户端。

和 Wails、Tauri、Electron、Fyne 怎么选

下表整理自各项目官方文档(2026 年 11 月 1 日核对),只对比架构设计和工具链依赖,不涉及性能。

mygo Wails Tauri 2 Electron Fyne
业务逻辑语言 Go Go Rust JavaScript(Node.js) Go
界面怎么渲染 系统 Webview,或 mygo 自绘原生 UI(GPU 或 CPU) 系统 Webview(“no embedded browser”) 系统 Webview(WebView2、WKWebView、webkit2gtk) 内置 Chromium Fyne 自绘组件,经系统图形驱动
需要 C 工具链吗 不需要,CGO_ENABLED=0 Linux 要 gcc、libgtk3、libwebkit;macOS 要 Xcode 命令行工具 需要 Rust 工具链(未进一步核对) 应用代码不需要 需要,“a C compiler (to connect with system graphics drivers)”
移动端 没有列为目标 未核对 iOS 和 Android 只做桌面(Windows、macOS、Linux) Android 和 iOS
协议 MIT MIT Apache-2.0 / MIT MIT BSD-3-Clause
GitHub 星数(11 月 1 日) 3,936 36,887 112,398 123,691 28,801

来源:mygo 架构文档、Wails README 和安装文档、Tauri 入门和 Webview 版本说明、Electron 文档、Fyne 快速开始。

mygo 的差异化在于:把系统 Webview 和自绘原生 UI 塞进了同一个 Go 框架,且彻底剥离了 cgo,单机就能交叉编译三大桌面平台。Wails 同样走 Go + Webview 路线,但生态成熟得多,11 月 1 日当天刚发了 v2.17.1 和 v3.1.0。Fyne 是老牌的 Go 自绘 UI 框架,但构建依赖 C 编译器。作者最初发中文介绍时直接把 mygo 称为“我的 Tauri/Wails 竞品”(原帖),随后列过几条对比 Tauri 的优势:“编译仅需几秒,而不是几分钟 - 跨平台编译 - 不会占用大量硬盘 - 自带增量更新,和类似 Sparkle 的更新窗口 UI - 自带类型安全的 ipc”(原帖)。这些是作者的说法;除了交叉编译和本机编译耗时,其余几项我们没有拿 Tauri 做平行测试。

局限和风险

  • 非常新。 2026 年 9 月 26 日才提交第一行代码,目前到 v0.7.4,几乎隔几天就发一个版本。连模板自带的 agent skill 都特意交代:0.x 阶段每次升级小版本必须先读迁移指南。截至 11 月 1 日,仓库里有 82 个未关闭的 issue。
  • 大部分代码有 AI agent 参与。 推进速度快得益于此,但作者说的“多年经验”在人不在代码——这套新代码库本身还没经过长期的生产环境检验。
  • 各平台的 Webview 不一样。 Web 模式在 Linux 下调 WebKitGTK,Windows 下调 WebView2,渲染表现和 Web 特性支持度取决于宿主系统。Linux 端目前绑定的是 GTK 3,架构文档里专门解释了为什么不用 GTK 4。
  • 我们只在一个系统上测了一件事。 GPU 渲染、macOS、Windows、Web 模式、代码签名、自动更新我们全都没跑过。前文列的内存、体积和性能数据均出自项目方。
  • 不支持移动端。 如果需要一套代码同时发 iOS 和 Android,Tauri 2 和 Fyne 官方都支持,mygo 不支持。

这对 AI 编程意味着什么

一个熟手开发者带着 AI agent 干五周能产出多少代码,mygo 留了一套公开记录:git 提交里的合作者署名、每次 push 自动跑的体积基准,以及新项目默认塞进目录的 agent skill。“不用 cgo”和“交叉编译”这两项直接跑命令就能验证,我们在测试机上都跑通了。

如果用来写小型 Go 桌面工具,尤其是像作者自己搞的那类原生 UI 小应用,mygo 值得一试。但得把它当成一个每周都在改的 0.x 项目,上 Web 模式前挨个去目标系统上核对 Webview 的渲染表现,等外部踩坑的人多起来,再考虑要不要放到大项目里。

原始资料