使用Golang开发桌面应用程序指南
使用Golang开发桌面应用程序指南 学习一门新编程语言时,第一个令人好奇的话题就是该技术相关的框架以及它能实现什么功能。
Go编程语言并未官方发布桌面应用程序框架,因为这并非其目标……Go的目标是开发系统和Web服务器为核心的基础设施应用。
那么情况如何呢?
我见过许多用Go进行桌面编程的不同方法。我们可以使用Electron.js、HTML-JS等构建桌面应用程序……但我们希望使用原生解决方案。正因如此,我们将重点关注原生的Go框架。
我们可以使用哪些?
- http://libs.club/golang/media/gui (不止一个)
- https://github.com/alexflint/gallium
- https://github.com/lxn/walk
- -> https://github.com/lxn/walk/tree/master/examples
- https://github.com/google/gxui
- https://github.com/mattn/go-gtk
- https://github.com/peterhoward42/godesktopgui
我的建议是使用为Qt/QML工作而创建的Go框架。Qt是一个非常先进且广泛使用的框架。我将以’andlabs/ui’框架作为本文的示例。实际上,我只是从GitHub上复制/粘贴。
让我们从示例开始:
首先,下载’andlabs/ui’库:
go get github.com/andlabs/ui
应用程序的源代码:
package main
import (
"github.com/andlabs/ui"
)
func main() {
err := ui.Main(func() {
name := ui.NewEntry()
button := ui.NewButton("Selamla")
greeting := ui.NewLabel("")
box := ui.NewVerticalBox()
box.Append(ui.NewLabel("Ad:"), false)
box.Append(name, false)
box.Append(button, false)
box.Append(greeting, false)
window := ui.NewWindow("Merhaba", 250, 100, false)
window.SetChild(box)
button.OnClicked(func(*ui.Button) {
greeting.SetText("Merhaba, " + name.Text() + "!")
})
window.OnClosing(func(*ui.Window) bool {
ui.Quit()
return true
})
window.Show()
})
if err != nil {
panic(err)
}
}
当我们运行项目时,将看到应用程序的用户界面。同样地,我们可以简单地通过编译项目来使用’go build’,这样我们将生成一个**.exe**文件。但这还不够!因为这个项目将在后台作为一个控制台应用程序运行。
因此,我们需要以下列方式编译此应用程序。
go build -ldflags -H=windowsgui main.go
应用程序截图


您可以通过以下链接访问上述应用程序的源代码:
原文:http://www.cihanozhan.com/desktop-application-development-with-go/
更多关于使用Golang开发桌面应用程序指南的实战教程也可以访问 https://www.itying.com/category-94-b0.html
一个我喜欢的Web前端项目,类似于Gallium,叫做Wails:https://wails.app/
更多关于使用Golang开发桌面应用程序指南的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
虽然Go语言主要专注于系统和Web服务器开发,但确实有一些第三方库支持原生桌面应用程序开发。以下是对你提到的几个框架的分析以及一个使用fyne框架的示例,因为andlabs/ui目前维护较少:
主流Go桌面GUI框架对比:
- Fyne - 跨平台,使用OpenGL渲染,活跃维护
- Walk - Windows专用,封装Win32 API
- Go-GTK - GTK绑定,适合Linux桌面
- Gio - 跨平台,即时模式GUI
使用Fyne的示例:
package main
import (
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/widget"
)
func main() {
myApp := app.New()
myWindow := myApp.NewWindow("Hello")
nameEntry := widget.NewEntry()
greetingLabel := widget.NewLabel("")
button := widget.NewButton("Greet", func() {
greetingLabel.SetText("Hello, " + nameEntry.Text + "!")
})
content := container.NewVBox(
widget.NewLabel("Name:"),
nameEntry,
button,
greetingLabel,
)
myWindow.SetContent(content)
myWindow.ShowAndRun()
}
安装Fyne:
go mod init myapp
go get fyne.io/fyne/v2
编译(自动隐藏控制台):
go build -ldflags="-H windowsgui" main.go
Walk框架示例(Windows):
package main
import (
"github.com/lxn/walk"
. "github.com/lxn/walk/declarative"
)
func main() {
var nameEdit *walk.LineEdit
var greetingLabel *walk.Label
MainWindow{
Title: "Hello",
MinSize: Size{250, 100},
Layout: VBox{},
Children: []Widget{
Label{Text: "Name:"},
LineEdit{AssignTo: &nameEdit},
PushButton{
Text: "Greet",
OnClicked: func() {
greetingLabel.SetText("Hello, " + nameEdit.Text() + "!")
},
},
Label{AssignTo: &greetingLabel},
},
}.Run()
}
这些框架都提供了原生的Go解决方案,无需依赖Electron或Web技术。Fyne目前是最活跃的跨平台选择,而Walk在Windows上提供最佳原生体验。

