通過(guò) Gio 構(gòu)建 Go GUI 程序
GUI 不是 Go 語(yǔ)言擅長(zhǎng)的領(lǐng)域,但社區(qū)一直在努力,讓 Go 進(jìn)入 GUI 領(lǐng)域,于是有了 fyne、gio 等這樣的 GUI 框架。
今天起,給大家?guī)?lái)一系列 Gio 教程,嘗試從零開(kāi)始構(gòu)建一個(gè) Gio GUI 程序。
本系列基于 Go1.17,而 Gio 沒(méi)有發(fā)布具體的版本
01 Gio 是什么
Gio 在 Go 中實(shí)現(xiàn)了可移植的即時(shí)模式 GUI 程序。Gio 程序可在所有主要平臺(tái)上運(yùn)行:iOS/tvOS、Android、Linux (Wayland/X11)、macOS、Windows、FreeBSD、OpenBSD 和對(duì)瀏覽器的實(shí)驗(yàn)性支持 (Webassembly/WebGL)。有一個(gè)用于在虛擬機(jī)中運(yùn)行 Gio 程序的 unikernel 端口[1]。
Gio 包括一個(gè)基于 Pathfinder 項(xiàng)目[2]的高效矢量渲染器,以及一個(gè)基于 piet-gpu 項(xiàng)目[3]的實(shí)驗(yàn)渲染器。兩種渲染器都支持 Vulkan、Metal、Direct3D 11 和 OpenGL ES。對(duì)于低端設(shè)備,有一個(gè)在未擴(kuò)展的 OpenGL ES 2.0 上運(yùn)行的 CPU 回調(diào)。
文本和其他形狀僅使用其輪廓進(jìn)行渲染,而無(wú)需將它們烘焙成紋理圖像,以支持高效動(dòng)畫(huà)、轉(zhuǎn)換繪圖和顯示分辨率獨(dú)立性。
Gio 的代碼在 https://git.sr.ht/~eliasnaur/gio,在 GitHub 上有鏡像:https://github.com/gioui/gio。
02 運(yùn)行官方的示例
Gio 設(shè)計(jì)時(shí)讓依賴盡可能少。它僅依賴用于窗口管理、輸入和 GPU 繪圖的平臺(tái)庫(kù)。
官方提供了一個(gè) Hello 程序,執(zhí)行如下命令:
$?go?run?gioui.org/example/hello@latest
成功會(huì)打開(kāi)一個(gè)窗口:

另外一個(gè)更復(fù)雜的例子,material design 的 widgets:
$?go?run?gioui.org/example/kitchen@latest
結(jié)果:

這些示例教程可以在 https://github.com/gioui/gio-example 找到。
03 系列教程
雖然命令行很棒,但 95% 的用戶不是高級(jí)用戶。他們想要按下按鈕,切換開(kāi)關(guān),然后繼續(xù)他們的生活。Gio 是一個(gè)很棒的工具包,用于構(gòu)建滿足你需求的精美、閃電般快速、靈活的用戶界面。
該系列由 10 個(gè)教程組成,我們將完全從零開(kāi)始,并構(gòu)建一個(gè)自包含的 GUI 應(yīng)用程序:

本系列教程基于 https://jonegil.github.io/gui-with-gio/,但不是簡(jiǎn)單的翻譯。歡迎對(duì) gio 感興趣的一起交流。
參考資料
unikernel 端口: https://eliasnaur.com/unik
[2]Pathfinder 項(xiàng)目: https://github.com/servo/pathfinder
[3]piet-gpu 項(xiàng)目: https://github.com/linebender/piet-gpu
我是 polarisxu,北大碩士畢業(yè),曾在 360 等知名互聯(lián)網(wǎng)公司工作,10多年技術(shù)研發(fā)與架構(gòu)經(jīng)驗(yàn)!2012 年接觸 Go 語(yǔ)言并創(chuàng)建了 Go 語(yǔ)言中文網(wǎng)!著有《Go語(yǔ)言編程之旅》、開(kāi)源圖書(shū)《Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)》等。
堅(jiān)持輸出技術(shù)(包括 Go、Rust 等技術(shù))、職場(chǎng)心得和創(chuàng)業(yè)感悟!歡迎關(guān)注「polarisxu」一起成長(zhǎng)!也歡迎加我微信好友交流:gopherstudio
