Show HN: Shirei, 用原生Go编写的跨平台GUI框架
摘要
Shirei是一个为Go语言设计的跨平台GUI框架,采用即时模式API,支持在MacOS、Windows和Linux上生成原生可执行文件,无需外部依赖。
查看缓存全文
缓存时间: 2026/07/12 19:50
hasenj/go-shirei
来源:https://github.com/hasenj/go-shirei
Shirei
Shirei 是一个跨平台 GUI 框架,适用于 Go。你可以用 Go 来编写用户界面,而不是 HTML 和 JavaScript。
真正跨平台:同一套代码能够在 MacOS、Windows 和 Linux 上生成外观完全一致的程序。同时,它也是为 Linux 构建不依赖任何外部库的独立 GUI 程序的最简单方式。
※ “Shirei” 来源于 “Simple Layout”(シンプル・レイアウト)的日语读音:シンプル・レイアウト → シレイ
haystack
动机
经验告诉我们,即时模式 API 是编写 GUI 应用程序唯一合理的方式。遗憾的是,目前没有一个好用且开箱即用的库或框架。有些要求你实现自己的后端,有些在跨平台支持上不够完善,还有一些对非拉丁文字的支持不够充分。
“即时模式”的关键是什么?是 UI 每帧都重新渲染所有内容吗?不是。关键在于:你只需根据数据(或主要根据数据)描述每一帧 UI 应该长什么样,就能构建出 UI。
这就是 React 胜出的原因:无需自己维护 UI 小部件,无需跟踪它们的状态来更新它们。你只需说:“在此时刻,我想要一个按钮在这里,按钮上的标签显示某某文字,当按钮被点击时,我想要执行某些操作。”
这个按钮以前存在吗?当你不再需要它时,它会发生什么?
你永远不需要回答这些问题。这是 React 最棒的地方,也是“即时模式”的真正含义。
如果你有一个 API 只允许你“绘制”东西,但还需要你自己维护所有“绘制”对象的状态,那就没什么意义。
process monitor
特性
-
原生:真正的可执行程序,不是网页。典型二进制文件大小 ≈10MB。
-
真正的即时模式 API:你永远不需要维护 UI 小部件,也无需将数据与小部件状态同步。
-
开箱即用:不仅仅是一个布局引擎,而是一个完整的框架,无需任何样板代码即可立即使用。
-
对国际化文本的完整支持:复杂字形塑造、双向排版、系统字体访问、东亚语言的 IME(输入法编辑器)支持。
-
灵活的布局与样式:Web 的优势之一在于 UI 布局极其灵活;你不必局限于一组标准的小部件和容器。你可以自己创建。
-
易于学习的 API,无论是人类还是 AI 代理都能轻松上手。如果你有一些小型程序创意但没时间实现,不妨让最新的 AI 引擎使用 shirei 来构建它。你会惊讶于它们的使用效果。
examples/ 目录下有几个示例程序 —— 如果只看一个,请从 haystack 开始。
快速开始
将以下内容复制到新文件夹的 main.go 文件中:
package main
import (
"fmt"
app "go.hasen.dev/shirei/app"
. "go.hasen.dev/shirei"
. "go.hasen.dev/shirei/widgets"
)
func main() {
app.SetupWindow("我的应用", 300, 100)
app.Run(RootView)
}
var count int
func RootView() {
Container(Attrs(Viewport, Background(220, 10, 97, 1)), func() {
Container(Attrs(Row, CrossMid, Pad(20), Gap(10)), func() {
Label(fmt.Sprintf("计数器: %d", count))
if Button(SymIPlus, "递增") {
count++
}
})
})
}
然后运行:
$ go mod init main
$ go mod tidy
$ go run .
学习
相似文章
Gooey:面向 Zig 的 GPU 加速 UI 框架
Gooey 是一个面向 Zig 的 GPU 加速 UI 框架,通过 Metal、Vulkan/Wayland 和 WebGPU/WASM 支持 macOS、Linux 和浏览器。它提供声明式 UI、动画、主题、无障碍和零外部依赖。
Show HN: Tiny – 一种带有内联Go原生函数的动态解释型语言
Tiny是一种用Go编写的新的动态解释型编程语言,具有字节码虚拟机、JIT编译和内联Go原生函数,以实现高性能。
Show HN: Davit,一个 Apple Containers 界面
Davit 是一个免费、开源的 macOS 原生应用,使用 SwiftUI 构建,为 Apple silicon 上的 Apple 容器平台提供用户界面,允许用户无需 Docker Desktop 即可运行 Linux 容器。
Show HN: Shumai —— 面向创意工作的开源 Frame.io 替代方案
Shumai 是一个面向创意工作的开源平台,作为 Frame.io 的替代方案,提供逐帧注释、安全共享、访问控制以及集成 AI 能力等功能。
Show HN: 我花了一个周末用Rust重写了IDE中我唯一使用的部分
Kyde 是一个快速的原生Git客户端和代码编辑器,使用Rust基于Zed的gpui框架构建,具有GPU渲染、并排差异对比、tree-sitter语法高亮以及一个精心调校的深色主题。