通过 Gio 构建 Go GUI 程序
GUI 不是 Go 语言擅长的领域,但社区一直在努力,让 Go 进入 GUI 领域,于是有了 fyne、gio 等这样的 GUI 框架。
今天起,给大家带来一系列 Gio 教程,尝试从零开始构建一个 Gio GUI 程序。
本系列基于 Go1.17,而 Gio 没有发布具体的版本
01 Gio 是什么
Gio 在 Go 中实现了可移植的即时模式 GUI 程序。Gio 程序可在所有主要平台上运行:iOS/tvOS、Android、Linux (Wayland/X11)、macOS、Windows、FreeBSD、OpenBSD 和对浏览器的实验性支持 (Webassembly/WebGL)。有一个用于在虚拟机中运行 Gio 程序的 unikernel 端口[1]。
Gio 包括一个基于 Pathfinder 项目[2]的高效矢量渲染器,以及一个基于 piet-gpu 项目[3]的实验渲染器。两种渲染器都支持 Vulkan、Metal、Direct3D 11 和 OpenGL ES。对于低端设备,有一个在未扩展的 OpenGL ES 2.0 上运行的 CPU 回调。
文本和其他形状仅使用其轮廓进行渲染,而无需将它们烘焙成纹理图像,以支持高效动画、转换绘图和显示分辨率独立性。
Gio 的代码在 https://git.sr.ht/~eliasnaur/gio,在 GitHub 上有镜像:https://github.com/gioui/gio。
02 运行官方的示例
Gio 设计时让依赖尽可能少。它仅依赖用于窗口管理、输入和 GPU 绘图的平台库。
官方提供了一个 Hello 程序,执行如下命令:
$ go run gioui.org/example/hello@latest
成功会打开一个窗口:
另外一个更复杂的例子,material design 的 widgets:
$ go run gioui.org/example/kitchen@latest
结果:
这些示例教程可以在 https://github.com/gioui/gio-example 找到。
03 系列教程
虽然命令行很棒,但 95% 的用户不是高级用户。他们想要按下按钮,切换开关,然后继续他们的生活。Gio 是一个很棒的工具包,用于构建满足你需求的精美、闪电般快速、灵活的用户界面。
该系列由 10 个教程组成,我们将完全从零开始,并构建一个自包含的 GUI 应用程序:
本系列教程基于 https://jonegil.github.io/gui-with-gio/,但不是简单的翻译。欢迎对 gio 感兴趣的一起交流。
参考资料
unikernel 端口: https://eliasnaur.com/unik
[2]Pathfinder 项目: https://github.com/servo/pathfinder
[3]piet-gpu 项目: https://github.com/linebender/piet-gpu
我是 polarisxu,北大硕士毕业,曾在 360 等知名互联网公司工作,10多年技术研发与架构经验!2012 年接触 Go 语言并创建了 Go 语言中文网!著有《Go语言编程之旅》、开源图书《Go语言标准库》等。
坚持输出技术(包括 Go、Rust 等技术)、职场心得和创业感悟!欢迎关注「polarisxu」一起成长!也欢迎加我微信好友交流:gopherstudio