【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

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

相关推荐
aq553560017 分钟前
PHP vs Python:30秒看懂核心区别
开发语言·python·php
我是无敌小恐龙20 分钟前
Java SE 零基础入门Day01 超详细笔记(开发前言+环境搭建+基础语法)
java·开发语言·人工智能·opencv·spring·机器学习
码云数智-大飞1 小时前
零基础微信小程序制作平台哪个好
开发语言
神仙别闹1 小时前
基于 MATLAB 实现的 DCT 域的信息隐藏
开发语言·matlab
techdashen2 小时前
Go 标准库 JSON 包迎来重大升级:encoding/json/v2 实验版来了
开发语言·golang·json
.千余2 小时前
【Linux】基本指令3
linux·服务器·开发语言·学习
南境十里·墨染春水2 小时前
C++ 笔记 thread
java·开发语言·c++·笔记·学习
南境十里·墨染春水2 小时前
C++ 笔记 高级线程同步原语与线程池实现
java·开发语言·c++·笔记·学习
来自远方的老作者3 小时前
第10章 面向对象-10.4 继承
开发语言·python·继承·单继承·多继承·super函数
逻辑驱动的ken3 小时前
Java高频面试考点场景题09
java·开发语言·数据库·算法·oracle·哈希算法·散列表