【Go系列】Go的UI框架Fyne

前言

总有人说Go语言是一门后端编程语言。

Go虽然能够很好地处理后端开发,但是者不代表它没有UI库,不能做GUI,我们一起来看看Go怎么来画UI吧。

正文

Go语言由于其简洁的语法、高效的性能和跨平台的编译能力,非常适合用于开发GUI应用程序。尽管Go不是传统上用于GUI开发的语言,但它具备以下特点使其成为这一任务的合适选择:

  1. 跨平台编译:Go可以轻松地交叉编译,这意味着你可以为Windows、Linux和macOS创建相同的代码库。

  2. 性能:Go语言编译后的程序通常是静态链接的,运行速度快,这对于GUI应用来说是一个重要的特性。

  3. 并发模型:Go的并发模型,特别是goroutines和channels,可以简化处理GUI中的异步操作。

  4. 简洁的依赖管理:Go的模块系统使得依赖管理变得简单,这对于构建和维护GUI应用程序是非常有帮助的。

以下是几种流行的Go语言UI库:

  1. GTK :通过使用gotk3等绑定,Go可以用来创建GTK+应用程序。GTK是一个广泛使用的跨平台工具集,用于创建GUI应用程序。

  2. Qt :通过qt包,Go可以与Qt框架集成,这是一个功能丰富的跨平台C++库,同样可以用于Go。

  3. Walk :这是一个Go语言的Windows应用程序库,它包装了libui,一个用于Go的便携式UI库。

接下来,我将详细介绍Fyne:

Fyne

我们可以通过该网站学习 快速开始 | Fyne 开发文档 (go-circle.cn)

Fyne是一个用Go编写的跨平台GUI库,旨在为开发人员提供快速、简单和高效的方法来创建应用程序。以下是Fyne的一些特点:

  • 跨平台:Fyne支持Windows、macOS、Linux、Android和iOS等多个平台。
  • 简单易用:Fyne的设计哲学是简单直观,使得Go开发者可以轻松上手。
  • 原生外观:Fyne应用程序在所有平台上都具有原生的外观和感觉。
  • 扩展性:Fyne提供了一系列标准组件,同时允许自定义扩展。

Fyne的关键组件和概念

  • Canvas:这是Fyne中绘制图形的基础,可以用来绘制形状、图像和文本。
  • Widgets:Fyne提供了一系列标准的小部件,如按钮、文本框、选择器等。
  • Layouts:布局用于控制窗口和小部件的排列方式,例如盒式布局、网格布局等。
  • Drivers:Fyne使用驱动程序来适配不同的操作系统,确保应用程序在各个平台上都能良好运行。

使用Fyne创建简单应用程序的步骤

  1. 安装Fyne包:

    复制代码
    go get fyne.io/fyne/v2
  2. 创建一个简单的窗口:

    Go 复制代码
    package main
    
    import (
    	"fyne.io/fyne/v2/app"
    	"fyne.io/fyne/v2/widget"
    )
    
    func main() {
    	a := app.New()
    	w := a.NewWindow("Hello")
    
    	w.SetContent(widget.NewLabel("Hello Fyne!"))
    
    	w.ShowAndRun()
    }
  3. 编译并运行你的应用程序。

Fyne的文档齐全,社区活跃,是Go语言开发GUI应用程序的一个非常好的选择。

运行官方Demo

我们通过以下指令来运行

Go 复制代码
go run fyne.io/fyne/v2/cmd/fyne_demo@latest

就能够看到电脑上生成下面的窗口:

相关推荐
Light601 分钟前
智启未来:深度解析Python Transformers库及其应用场景
开发语言·python·深度学习·自然语言处理·预训练模型·transformers库 |·|应用场景
一个天蝎座 白勺 程序猿3 分钟前
Python爬虫(5)静态页面抓取实战:requests库请求头配置与反反爬策略详解
开发语言·爬虫·python
一眼青苔8 分钟前
python环境使用conda,conda如何升级默认的python版本
开发语言·python·conda
_w_z_j_26 分钟前
C++----模拟实现string
开发语言·c++
张槊哲29 分钟前
const(C++)
开发语言·c++
沐知全栈开发1 小时前
MongoDB 创建数据库
开发语言
ErizJ1 小时前
Golang | 迭代器模式
开发语言·golang·迭代器模式
牙痛不能吃糖,哭1 小时前
C++面试复习日记(8)2025.4.25,malloc,free和new,delete的区别
开发语言·c++
健康的猪1 小时前
golang的cgo的一点小心得
开发语言·后端·golang
夜夜敲码2 小时前
C语言教程(十六): C 语言字符串详解
c语言·开发语言