展示 HN:Shirei,一个基于原生 Go 的跨平台 GUI 框架
Shirei 是一个用于 Go 的跨平台 GUI 框架。你可以使用 Go 来编写 UI,而不是 HTML 和 Javascript。真正的跨平台:相同的代码库为 MacOS、Windows 和 Linux 生成外观完全相同的程序。还恰好是生成自包含的 Linux GUI 程序的最简单方法,无需任何依赖。※ “Shirei” 源自于“简单布局”的日语发音:シンプル・レイアウト → シレイ 动机 经验告诉我们,即时模式 API 是编写 GUI 应用程序的唯一理智方式。不幸的是,没有好的库或框架能正常工作。它们中的一些要求你实现自己的后端,一些没有良好的跨平台支持,一些对非拉丁文本没有适当的支持。 “即时模式”重要的是什么?是 UI 每帧都会渲染所有内容吗?不是。关键在于你通过描述每帧应该是什么样子来构建 UI,主要基于数据。这就是 React 胜出的原因:你无需自己维护 UI 小部件,无需跟踪它们的状态以进行更新。你只需说:“在这个时间点,我想在这里放一个按钮,并希望其标签显示某某内容,点击时希望执行这个那个。” 这个按钮之前存在吗?当你不再需要它时它会发生什么?你永远不需要回答这些问题。这就是 React 最好的部分,这就是“即时模式”的核心。如果你有一个 API,只是让你“绘制”东西,但你还负责维护所有“东西”的状态,那么就没有好处。 特点: - 原生:真正可执行的程序,而不是网页。典型的二进制文件大小≈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 . ``` 学习 教程 音频 容器身份 拖放
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡