在 Debian 上进行 Go 图形界面开发
一 环境准备
二 常用方案与快速上手
Fyne(跨平台、API 简洁、自带打包)
GTK 3 + gotk3(Linux 原生外观、生态成熟)
package main import ( “log” “github.com/gotk3/gotk3/gtk” ) func main() { gtk.Init(nil) win, _ := gtk.WindowNew(gtk.WINDOW_TOPLEVEL) win.SetTitle(“Hello GTK”) win.SetDefaultSize(400, 300) win.Connect(“destroy”, func() { gtk.MainQuit() })
box, _ := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 6) label, _ := gtk.LabelNew(“Hello, GTK!”) button, _ := gtk.ButtonNewWithLabel(“Click”) button.Connect(“clicked”, func() { log.Println(“clicked”) })
box.Add(label) box.Add(button) win.Add(box) win.ShowAll() gtk.Main() }
运行:go run main.go
libui(andlabs/ui,平台原生外观)
三 方案对比与选型建议
| 方案 | 依赖与构建 | 外观与体验 | 跨平台与打包 | 上手难度 | 典型场景 |
|---|---|---|---|---|---|
| Fyne | 纯 Go,交叉编译简单,内置打包工具 | 自绘统一风格,主题可定制 | 支持 Windows/macOS/Linux,可生成安装包/AppImage | 低 | 快速原型、跨平台发布 |
| GTK 3 + gotk3 | 需 GTK 3 与 CGO,Linux 原生 | 贴近 GNOME/GTK 生态 | 主要在 Linux,跨平台需额外适配 | 中 | Linux 桌面应用 |
| libui | 需 CGO 与 GTK 3(Linux) | 平台原生控件外观 | Windows/macOS/Linux 原生外观 | 中 | 小型原生外观工具 |
四 构建与打包要点