当前位置: 首页 > 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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SQL Server中非结构化数据的存储神器:文件表的魔力
  • 21 B端产品经理之技术常识(1)
  • Python | Leetcode Python题解之第284题窥视迭代器
  • Alternating Sum
  • web基础,http协议,apache概念及nginx
  • C#小结:string、double、TimeSpan等常见类型的小结和坑点
  • mysql的存储过程:
  • go操作aws s3
  • RemakePython
  • 24年第三届钉钉杯大学生大数据挑战赛
  • PySide(PyQt)使用QPropertyAnimation制作动态界面
  • html实现酷炫美观的可视化大屏(十种风格示例,附源码)
  • 【JS】前端文件读取FileReader操作总结
  • 写代码对人的影响
  • Linux(虚拟机)的介绍
  • $translatePartialLoader加载失败及解决方式
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 4. 路由到控制器 - Laravel从零开始教程
  • canvas 高仿 Apple Watch 表盘
  • ES6系统学习----从Apollo Client看解构赋值
  • express.js的介绍及使用
  • iOS 系统授权开发
  • LeetCode29.两数相除 JavaScript
  • Lucene解析 - 基本概念
  • mysql_config not found
  • OSS Web直传 (文件图片)
  • 算法-图和图算法
  • 我有几个粽子,和一个故事
  • 一份游戏开发学习路线
  • 终端用户监控:真实用户监控还是模拟监控?
  • - 转 Ext2.0 form使用实例
  • 昨天1024程序员节,我故意写了个死循环~
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (Git) gitignore基础使用
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (vue)el-cascader级联选择器按勾选的顺序传值,摆脱层级约束
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (分布式缓存)Redis持久化
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (算法)Travel Information Center
  • (一) springboot详细介绍
  • .net core 6 集成和使用 mongodb
  • .Net Core 微服务之Consul(二)-集群搭建
  • .NET MVC第三章、三种传值方式
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .net 反编译_.net反编译的相关问题
  • .net6 webapi log4net完整配置使用流程
  • @Transactional 竟也能解决分布式事务?
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • [100天算法】-x 的平方根(day 61)
  • [2019红帽杯]Snake
  • [Angular] 笔记 16:模板驱动表单 - 选择框与选项