当前位置: 首页 > news >正文

【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. 创建一个简单的窗口:

    package mainimport ("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 run fyne.io/fyne/v2/cmd/fyne_demo@latest

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

http://www.lryc.cn/news/409027.html

相关文章:

  • .NET MAUI:跨平台开发的未来
  • VSCode切换默认终端
  • 卫星观测叶绿素的相反信号
  • 2024年最新NVIDIA T4价格表及行业趋势!
  • HTML + CSS编程规范
  • 机器学习之人脸识别-使用 scikit-learn 和人工神经网络进行高效人脸识别
  • 【虚拟化】KVM概念和架构
  • 【Linux】权限2
  • 汽车长翅膀:GPU 是如何加速深度学习模型的训练和推理过程的?
  • 怀旧必玩!重返童年,扫雷游戏再度登场!
  • Avalonia中的路由事件
  • ubuntu20.04安装RabbitMQ +Erlang
  • 【word转pdf】【最新版本jar】Java使用aspose-words实现word文档转pdf
  • 分布式:RocketMQ/Kafka总结(附下载链接)
  • Air780EP模块 LuatOS开发-MQTT接入阿里云应用指南
  • 【算法】插入区间
  • C++ 代码实现socket 类使用TCP/IP进行通信 (windows 系统)
  • 前后端分离项目部署,vue--nagix发布部署,.net--API发布部署。
  • 【BUG】已解决:UnicodeDecodeError: ‘utf-8’ codec can’t decode bytes in position 10
  • C++ | QQ后端暑期实习面试
  • 实用网站推荐
  • Linux |Nethogs 监控网络使用情况
  • 大语言模型训练过程中,怎么实现算力共享,采用什么分片规则和共享策略
  • JCR一区级 | Matlab实现TTAO-Transformer-LSTM多变量回归预测
  • 斐波那契数列(Fibonacci)数列 c++详解
  • 第三届人工智能、物联网和云计算技术国际会议(AIoTC 2024,9月13-15)
  • 家具购物小程序的设计
  • 测试面试宝典(三十四)—— token是做什么用的?
  • 计算机网络基础:4.HTTP与HTTPS
  • 【深度学习入门】安装conda/miniconda、所需包类、CUDA与conda/Miniconda间的关系