【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.mzph.cn/web/49691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MICA:面向复杂嵌入式系统的混合关键性部署框架

背景 在嵌入式场景中,虽然 Linux 已经得到了广泛应用,但并不能覆盖所有需求,例如高实时、高可靠、高安全的场合。这些场合往往是实时操作系统的用武之地。有些应用场景既需要 Linux 的管理能力、丰富的生态,又需要实时操作系统的高…

vue中scoped详解以及样式穿透>>>、/deep/、::v-deep

1、scoped scoped属性用于限制样式仅应用于当前组件。当一个style标签拥有scoped属性时,它的CSS样式就只能作用于当前的组件,通过该属性,可以使得组件之间的样式不互相污染。 原理:当样式中加了scoped属性时候,编译的…

数据库解析一维和二维简易JSON,

项目还在使用Oracle11,不支持后续官方的json解析方式, 在 前年、去年、今年 接连 遇到json解析问题后(其实是公司的轮子效率太慢,太复杂,决定自己造个轮子,看看到底为什么慢,是不是真的很复杂&a…

【最新】cudnn安装教程

最近换了新电脑需要重新安装cuda和cudnn,发现现在cudnn的安装比以前方便多了,直接在官网下载exe安装包一键运行即可。安装的时候注意cuda和cudnn的对应关系即可:【最新】cuda和cudnn和显卡驱动的对应关系-CSDN博客 访问cudnn下载链接cuDNN 9…

Git 基础 GitHub【学习笔记】

一、Git 优势 大部分操作在本地完成,不需要联网完整性保证尽可能添加数据而不是删除或修改数据分支操作非常快捷流畅与 Linux 命令全面兼容 二、Git 程序安装 https://git-scm.com 三、Git 结构 #mermaid-svg-9Go6R1leWXWrDCqn {font-family:"trebuchet ms&quo…

Redis面试三道题目

针对Redis的面试题,我将从简单到困难给出三道题目,并附上参考答案的概要。 1. 简单题:请简述Redis是什么,以及它的主要优点。 参考答案: Redis简介:Redis是一个开源的、使用ANSI C语言编写、支持网络、可…

TCP/IP and Ethernet

目录 1. What is Internet?2. Ethernet2.1. Physical Layer(PHY)2.2. MACMAC帧格式MAC地址与IP地址2.3. RGMII接口3. TCP/IP3.1. Network Layer3.1.1. ARPARP工作过程ARP帧格式3.1.2. IP3.2. Transport Layer3.2.1. ICMP3.2.2. UDP3.2.3. TCP手把手教你学达芬奇&达芬奇Pro…

C#中GridControl的数据源双向绑定

1. 什么是双向数据绑定? 双向数据绑定是一种允许我们创建持久连接的技术,使模型数据和用户界面(UI)之间的交互能够自动同步。这意味着当模型数据发生变化时,UI会自动更新,反之亦然。这种双向数据绑定极大地简化了UI和模型数据之间…

C++STL简介(二)

目录 1.模拟实现string 1.string基本属性和大体框架 2.基本函数 2.1size&#xff08;&#xff09; 2.2 [] 2.3 begin() 和end() 2.4capacity&#xff08;&#xff09; 2.5 reserve 2.6push_back 2.7 append 2.8 2.9insert 2.10find 2.11substr 2.12 2.12 < …

运维锅总详解NFS

NFS是什么&#xff1f;如何对NFS进行部署及优化&#xff1f;NFS工作流程是什么&#xff1f;NFS的性能及优缺点是什么&#xff1f;NFS发展历史又是怎样的&#xff1f;希望本文能帮您解答这些疑惑&#xff01; 一、NFS简介 NFS (Network File System) 是由 Sun Microsystems 在…

论文精读(保姆级解析)—— Flash Diffusion

0 前言 今天分析的论文是《Flash Diffusion: Accelerating Any Conditional Diffusion Model for Few Steps Image Generation》。该论文发表在2024年&#xff0c;目前已开源在arxiv上&#xff0c;主要提出了一种高效、快速且多功能的蒸馏方法&#xff0c;用于加速预训练扩散模…

[C++][STL源码剖析] 详解AVL树的实现

目录 1.概念 2.实现 2.1 初始化 2.2 插入 2.2.1 旋转&#xff08;重点&#xff09; 左单旋 右单旋 双旋 2.❗ 双旋后&#xff0c;对平衡因子的处理 2.3 判断测试 完整代码&#xff1a; 拓展&#xff1a;删除 1.概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但…

遇到Websocket就不会测了?别慌,学会这个Jmeter插件轻松解决....

websocket 是一种双向通信协议&#xff0c;在建立连接后&#xff0c;websocket服务端和客户端都能主动向对方发送或者接收数据&#xff0c;而在http协议中&#xff0c;一个request只能有一个response&#xff0c;而且这个response也是被动的&#xff0c;不能主动发起。 websoc…

【研路导航】保研英语面试高分攻略,助你一路过关斩将

面试攻略之 千锤百炼英语口语 写在前面 在保研面试中&#xff0c;英语口语往往是让许多同学感到头疼的一部分。如何在面试中展现出自信和流利的英语表达能力&#xff0c;是我们今天要探讨的主题。以下是一些有效的英语口语练习方法和常见题型解析&#xff0c;帮助你在保研面试…

Redis 7.x 系列【31】LUA 脚本

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 常用命令2.1 EVAL2.2 SCRIPT LOAD2.3 EVALSHA2.4 SCRIPT FLUSH2.5 其他 3. …

LoRA:低秩自适应

LoRA:低秩自适应 本章节是对轻松上手微调大语言模型——QLORA篇中提到的LoRA的原理解释。 背后动机 现今模型的参数量变得越来越大&#xff0c;对预训练模型进行全微调变得越来越不可行。为了解决这个问题有了LoRA&#xff08;Low-Rank Adaption&#xff09;的诞生。将可训练…

linux命令行登录百度网盘下载文件

1、linux系统中已安装有python环境&#xff0c;安装bypy库和requests库安装方法如下&#xff1a; pip install requests -i https://pypi.doubanio.com/simple pip install bypy -i https://pypi.doubanio.com/simple # 这里我是直接使用如下命令安装的 rambop360:~$ sudo pip3…

Nginx制作下载站点

使用nginx制作一个类似nginx官网的下载站点 如何制作一个下载站点,首先需要ngx_http_autoindex_module模块 该模块处理以斜杠(“/”)结尾的请求&#xff0c;并生成目录列表。 nginx编译的时候会自动加载该模块&#xff0c;但是该模块默认是关闭的&#xff0c;需要使用下来指令…

3 FreeRTOS移植(从FREERTOS官网移植进自己的工程)

3 FreeRTOS移植 1 获取FreeRTOS源码&#xff08;熟悉&#xff09;1.1 介绍源码内容1.2 FreeRTOS内核1.2.1 Demo文件夹1.2.2 Source文件夹1.2.2.1 portable文件夹 2 FreeRTOS手把手移植&#xff08;掌握&#xff09;&#xff08;重要&#xff09;2.1 移植步骤 3 系统配置文件说明…

GraphHopper-map-navi_路径规划、导航(web前端页面版)

文章目录 一、项目地址二、踩坑环境三、问题记录3.1、graphhopper中地图问题3.1.1. getOpacity不存在的问题3.1.2. dispatchEvent不存在的问题3.1.3. vectorLayer.set(background-maplibre-layer, true)不存在set方法3.1.4. maplibre-gl.js.map不存在的问题3.1.5. Uncaught Ref…