Go Energy 实现的跨平台桌面(GUI)应用介绍

news2024/11/26 22:37:59

在这里插入图片描述

关于 Energy

Energy是Go语言基于LCL和CEF开发的跨平台桌面应用框架
系统支持
Windows 系列 XP SP3 到 Windows 11, Linux,MacOS.

版本

当前版本2.x

底层动态链接库 liblcl
LCL: Lazarus 跨平台 GUI LCL 组件库, 包含了大量的系统原生GUI控件, 多达几百个控件. 在Go里可以单独构建开发原生系统应用
CEF: Chromium Embedded Framework, 是CEF4Delphi基于CEF3封装的API底层库, 属于LCL其中的一个控件库. 在Go中当前封装了多达85%以上的CEF API. 可以非常方便操作浏览器, 可以实现任何你想对浏览器做的事情.

下个版本3.x, 提供更多的LCL控件, CEF API完全封装, 增加对Webview2, Webkit 支持.

使用

LCL: 在 Go 可独立开发小巧原生的GUI应用.
CEF: 可与LCL结合混合使用,使用前端技术(JavaScript, HTML, CSS)开发GUI应用.

使用 Energy 开发应用
Go: 最底支持Go1.11版本。由于Go版本更新对于一些系统将不在支持。例如Go1.11可以编译支持Windows XP SP3程序,Go1.20支持Window7 / 8 / Server 2008 / Server 2012的最后一个版本, 根据实际情况选择不同的Go版本.
CEF: 同样是对于一些更新后的版本将不在支持一些系统. Energy由于出现的比较晚, 但对于特定的系统做了支持.

  • WindowsXP SP3: CEF49, 它比较古老是最后一个支持XP系统的CEF,
  • Windows7 / 8 / Server 2008 / Server 2012: CEF109 是最后一个支持此版本的Windows系列
  • CEF89: 最后一个支持Flash的CEF版本
  • Linux: 区分为 GTK2 和 GTK3, CEF 106是最后一个支持GTK2的. 默认使用GTK3也就是Energy当前支持的最新CEF版本

LCL: 不区分版本, 对任何系统都支持, 一视同仁. 但对CEF有些区别对待, 由于CEF 在Linux 下 对 GTK 支持不同, 表现为, 在Linux 下 CEF 106 使用的是GTK2. CEF大于106使用的是 GTK3 注意: 此时 如使用GTK3将无法使用LCL的组件.

开发环境

使用 energy 提供的工具自动安装开发环境, 它的安装过程主要为, 在网络下载CEF二进制框架和energy的底层动态链接库liblcl, 下载Go(如果已配置则不下载), 和其它可选择工具.
或者自己编译 energy 命令行工具
git clone https://github.com/energye/energy.git
进入 cmd 目录 go install 安装 energy 命令行工具
开发环境 安装教程

开发环境安装好后, 我们使用几个命令创建一个项目

  1. 安装开发环境: energy install .
  2. 初始化应用: energy init .
  3. 运行应用: go run main.go

初始化的代码

package main

import (
	"embed"
	"github.com/energye/energy/v2/cef"
)

//go:embed resources
var resources embed.FS

func main() {
	//Global initialization must be called
	cef.GlobalInit(nil, &resources)
	//Create an application
	app := cef.NewApplication()
	//Local load resources
	cef.BrowserWindow.Config.LocalResource(cef.LocalLoadConfig{
		ResRootDir: "resources",
		FS:         &resources,
	}.Build())
	//run app
	cef.Run(app)
}

应用打包

  1. 编译:energy build .
  2. 打包:energy package .
  3. 自动生成的安装包
    • windows 使用nsis工具生成exe安装包
    • linux 使用dpkg制作deb安装包
    • macos 生成xxx.app

文档

在 energy 官网或 pkg.go.dev
文档目前还不全面, 推荐参考示例

示例

提供了大量的使用示例.
github examples
gitee examples
gitcode examples

一些示例截图

LCL+CEF
macos-menu
macos-dialog
麒麟系统arm64

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1625755.html

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

相关文章

快速体验 Llama3 的 4 种方式,本地部署,800 tokens/s 的推理速度真的太快了!

北京时间4月19日凌晨,Meta在官网上官宣了Llama-3,作为继Llama1、Llama2和CodeLlama之后的第三代模型,Llama3在多个基准测试中实现了全面领先,性能优于业界同类最先进的模型,你有没有第一时间体验上呢,这篇文…

DS:单链表的实现

欢迎各位来到 Harper.Lee 的编程学习小世界! 博主主页传送门:Harper.Lee的博客 我将在这里分享我的学习过程等心得 创作不易,码字不易,兄弟们养成先赞后看的好习惯哦! 想一同进步的uu,可以来后来找我哦&…

20232937文兆宇 2023-2024-2 《网络攻防实践》实践七报告

20232937文兆宇 2023-2024-2 《网络攻防实践》实践七报告 1.实践内容 (1)使用Metasploit进行Linux远程渗透攻击 任务:使用Metasploit渗透测试软件,攻击Linux靶机上的Samba服务Usermap_script安全漏洞,获取目标Linux…

深入Linux下的GCC编译器:从入门到精通

目录标题 1、GCC编译器概述2、安装GCC3、GCC的基本使用4、高级功能4.1 多文件编译4.2 静态和动态链接4.3 什么是链接?4.4 静态链接优点缺点 4.5 动态链接优点缺点 4.6 实际应用4.7 编译优化 GCC(GNU Compiler Collection)是一款免费、开源的编…

累积流量计算(MODBUS RTU通信数据处理)

1、常用通信数据处理 MODBUS通信系列之数据处理_modbus模拟的数据变化后会在原来的基础上累加是为什么-CSDN博客文章浏览阅读1k次,点赞2次,收藏2次。MODBUS通信专栏有详细文章讲解,这里不再赘述,大家可以自行查看。链接如下:SMART S7-200PLC MODBUS通信_RXXW_Dor的博客-C…

操作系统(Operating System)知识点复习——第十一章 I/O管理与磁盘调度

目录 0.前言 1.I/O设备 2.I/O功能的组织 3.Operating System Design Issues 4.I/O缓冲 4.1 单缓冲Single Buffer 4.2 双缓冲Double Buffer 4.3 循环缓冲 5.磁盘调度Disk Scheduling 5.1 磁盘性能参数 5.2 磁盘调度策略 ①First-in,first-out(FIFO) ②Pr…

芯片胶点胶加工的效果和质量的检测方法有哪些?

芯片胶点胶加工的效果和质量的检测方法有哪些? 芯片胶在电子封装领域用的是比较多的,特别是高度精密集成芯片器件。那么如何判断点胶后的效果和质量的好与坏? 芯片胶点胶加工的效果和质量的检测是一个重要的环节,以确保产品满足设…

医院能耗监测管理系统,助力医院节能减排

医院属于大型建筑,由于医院能耗计量点位繁多,数据采集大多采用传统的人工模式,很难保证计量管理的准确性和科学性。为了对医院能耗进行精细化管理,需要建立能耗管理系统,在辅助成本核算工作的同时,可以实时…

Java学习笔记29(泛型)

1.泛型 ArrayList<Dog> arrayList new ArrayList<Dog>(); //1.当我们ArrayList<Dog>表示存放到ArrayList集合中的元素是Dog类 //2.如果编译器发现添加的类型&#xff0c;不满足要求&#xff0c;就会报错 //3.在便利的时候&#xff0c;可以直接取出Dog类型而…

8个拿来即用的Python自动化脚本!

每天你都可能会执行许多重复的任务&#xff0c;例如阅读新闻、发邮件、查看天气、清理文件夹等等&#xff0c;使用自动化脚本&#xff0c;就无需手动一次又一次地完成这些任务&#xff0c;非常方便。而在某种程度上&#xff0c;Python 就是自动化的代名词。 今天分享 8 个非常…

BGP的基本配置

l 按照以下步骤配置BGP协议&#xff1a; 第1步&#xff1a;设备基本参数配置&#xff0c;AS内配置IGP确保内部网络连通性&#xff1b; l 配置IGP&#xff08;OSPF协议等&#xff09;路由解决peer对等体的源和目标IP之间连通性&#xff0c;确保peer之间TCP&#xff08;179&a…

如何查看自己的公网IP?

我们在网络中&#xff0c;每一个设备都被分配了一个唯一的IP地址&#xff0c;用以区分和识别其他设备。公网IP地址是指可被公众访问的IP&#xff0c;是因特网上的全球唯一标识。当我们需要查看自己的公网IP时&#xff0c;可以采取以下几种方式。 使用命令行查看公网IP 在Windo…

SpringCloud 之 服务提供者

前提 便于理解,我修改了本地域名》这里!!! 127.0.0.1 eureka7001.com 127.0.0.1 eureka7002.com 127.0.0.1 eureka7003.com学习Rest实例之提供者 提供者模块展示 1、导入依赖 <!-- 实体类 Web--><dependency><groupId>com.jyl</groupId><…

光电离子传感器PID-AH5在空气质量监测和HVAC系统中的应用

随着工业化和城市化的步伐不断加快&#xff0c;空气质量问题日益严重&#xff0c;对人们的健康和生活品质构成了严重威胁。为了有效监测和改善空气质量&#xff0c;光电离子传感器作为一种先进的检测技术&#xff0c;正在空气质量监测以及HVAC&#xff08;供暖、通风和空调&…

OpenHarmony实战开发-状态变量组件定位工具实践

概述 自定义组件中的变量被状态装饰器&#xff08;State&#xff0c;Prop等&#xff09;装饰后成为状态变量&#xff0c;而状态变量的改变会引起使用该变量的UI组件渲染刷新。状态变量的不合理使用可能会带来冗余刷新等性能问题。开发者可以使用状态变量组件定位工具获取状态管…

JdbcTemplate详解

1 概述 为了使JDBC更加易于使用&#xff0c;Spring在JDBC API上定义了一个抽象层&#xff0c;以此建立一个JDBC存取框架。 作为Spring JDBC框架的核心&#xff0c;JDBC模板的设计目的是为不同类型的JDBC操作提供模板方法&#xff0c;通过这种方式&#xff0c;可以在尽可能保留…

【数据结构(邓俊辉)学习笔记】向量02——动态空间管理

文章目录 1. 概述2. 静态空间管理缺点3. 动态空间管理3.1 扩容3.1.1 如何实现扩容3.1.2 扩容算法3.1.3 容量递增策略 VS 容量倍增策略3.1.3.1 容量倍增策略分摊分析3.1.3.2 容量递增策略分摊分析3.1.3.3 结果对比 3.2缩容3.2.1 动态缩容算法实现3.2.2 动态缩容算法时间复杂度 4…

Sui主网升级至V1.23.1版本

其他升级要点如下所示&#xff1a; #17126 协议&#xff1a;Deepbook的更改将被还原。 #16673 开发者可能会看到更多编译器诊断&#xff0c;因为选择的解析错误不再阻止编译&#xff0c;并且编译器的诊断会到达后续编译阶段&#xff0c;其中可能会生成额外的诊断。 #16966…

SQLite FTS5 扩展(三十)

返回&#xff1a;SQLite—系列文章目录 上一篇:SQLite的知名用户(二十九) 下一篇:SQLite 的命令行 Shell(三十一&#xff09; 1. FTS5概述 FTS5 是一个 SQLite 虚拟表模块&#xff0c;它为数据库应用程序提供全文搜索功能。在最基本的形式中&#xff0c; 全文搜索引擎允许…

【LAMMPS学习】八、基础知识(4.5)TIP5P水模型

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…