通過 Gio 構建 Go GUI 程序
GUI 不是 Go 語言擅長的領域,但社區(qū)一直在努力,讓 Go 進入 GUI 領域,于是有了 fyne、gio 等這樣的 GUI 框架。
今天起,給大家?guī)硪幌盗?Gio 教程,嘗試從零開始構建一個 Gio GUI 程序。
本系列基于 Go1.17,而 Gio 沒有發(fā)布具體的版本
01 Gio 是什么
Gio 在 Go 中實現(xiàn)了可移植的即時模式 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 程序,執(zhí)行如下命令:
$?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% 的用戶不是高級用戶。他們想要按下按鈕,切換開關,然后繼續(xù)他們的生活。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,北大碩士畢業(yè),曾在 360 等知名互聯(lián)網公司工作,10多年技術研發(fā)與架構經驗!2012 年接觸 Go 語言并創(chuàng)建了 Go 語言中文網!著有《Go語言編程之旅》、開源圖書《Go語言標準庫》等。
堅持輸出技術(包括 Go、Rust 等技術)、職場心得和創(chuàng)業(yè)感悟!歡迎關注「polarisxu」一起成長!也歡迎加我微信好友交流:gopherstudio
