通過 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 感興趣的一起交流。

參考資料

[1]

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

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/3cqM6UiJT1fwScMvKRyOmw