通过 Gio 构建 Go GUI 程序
共 1572字,需浏览 4分钟
·
2021-10-20 00:16
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