golang跨平台原生UI与Chromium嵌入式框架插件库energy的使用

Golang跨平台原生UI与Chromium嵌入式框架插件库Energy的使用

Energy Logo

项目介绍

Energy是一个基于Go语言开发的GUI框架,基于LCL和CEF(Chromium Embedded Framework),用于开发跨平台的桌面应用程序,支持Windows、MacOS和Linux。

  • 可以单独使用LCL创建轻量级的原生应用程序,也可以结合CEF创建功能更完整的应用程序
  • 使用Go和Web技术(HTML+CSS+JavaScript)构建支持Windows、Linux和MacOS的跨平台桌面应用程序

特性

  • 丰富的CEF API和LCL系统原生组件
  • 开发环境简单,编译速度快,仅需Go和Energy
  • 跨平台:可以将代码打包为Windows、国产UOS、Deepin、麒麟、MacOS和Linux应用
  • 职责分工:
    • Go:负责创建窗口、配置CEF和实现功能,创建各种UI组件,调用系统底层和一些JS无法处理的功能,如:文件流、安全加密、高性能处理等
    • Web:HTML+CSS+JavaScript负责客户端界面的功能,可以制作任何你想要的界面
  • 前端技术:支持主流框架,如Vue、React、Angular或纯HTML+CSS+JS
  • 事件驱动:基于IPC的高性能事件驱动通信,允许Go和Web之间相互通信
  • 资源加载:可以读取本地资源或内置到执行文件中的资源,无论是否有HTTP服务

快速开始

三步运行一个简单应用

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

示例代码

main.go

package main

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

func main() {
     // 全局初始化
     cef.GlobalInit(nil, nil)
     // 创建应用
     app := cef.NewApplication()
     // 指定URL地址或本地HTML文件目录
     cef.BrowserWindow.Config.Url = "https://energye.github.io"
     // 运行应用
     cef.Run(app)
}

构建

  1. 构建:energy build
  2. 打包:energy package
  3. 打包类型:
    • windows: 使用nsis创建exe安装包
    • linux: 使用dpkg创建deb安装包
    • macos: 生成xxx.app

系统支持

OS 32-bit 64-bit
Windows ✔️ ✔️
MacOSX (Intel) ✔️
MacOS (Apple Silicon) ✔️
Linux ✔️ ✔️
Linux ARM ✔️ ✔️

项目截图

Windows-10

Windows 10

Windows-7 32 & 64

Windows 7 64 Windows 7 32

Windows-XP-SP3

Windows XP

Linux - Deepin

Deepin Deepin Hide

Linux - Kylin ARM

Kylin ARM Kylin ARM Hide

Linux - Ubuntu

Ubuntu Ubuntu Hide

MacOSX

MacOS


更多关于golang跨平台原生UI与Chromium嵌入式框架插件库energy的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang跨平台原生UI与Chromium嵌入式框架插件库energy的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Golang跨平台原生UI与Energy框架使用指南

原生UI与嵌入式框架对比

在Golang中实现跨平台GUI应用主要有两种方式:

  1. 原生UI框架:如Fyne、Walk、Lorca等,使用各平台原生组件
  2. 嵌入式Chromium框架:如Energy、Lorca、WebView等,基于浏览器引擎

Energy是一个基于CEF(Chromium Embedded Framework)的Golang框架,允许开发者使用HTML/CSS/JS构建UI,同时享受Golang的性能优势。

Energy框架使用示例

1. 安装Energy

go get github.com/energye/energy/v2

2. 基本应用示例

package main

import (
	"github.com/energye/energy/v2/cef"
	"github.com/energye/energy/v2/consts"
	"github.com/energye/energy/v2/pkgs/assetserve"
)

func main() {
	// 全局CEF初始化
	cef.GlobalInit(nil, nil)
	
	// 创建应用
	app := cef.NewApplication()
	
	// 主窗口配置
	window := cef.NewBrowserWindow(app.RootWindowConfig(), 800, 600, "https://localhost:8080", nil)
	
	// 设置窗口属性
	window.SetTitle("Energy示例")
	window.SetSize(1024, 768)
	window.SetMinSize(800, 600)
	window.SetCenterWindow(true)
	
	// 本地资源服务
	server := assetserve.NewAssetsHttpServer()
	server.PORT = 8080
	server.AssetsFSName = "resources" // 资源目录
	server.Assets = &assetserve.Assets{
		FS: "resources", // 本地资源目录
	}
	go server.StartHttpServer()
	
	// 运行应用
	cef.Run(app)
}

3. 与前端交互

Golang端:

// 注册JS可调用的函数
window.Chromium().SetOnAfterCreated(func(browser *cef.IBrowser) {
    browser.MainFrame().ExecuteJavaScript(`
        // 注册Go函数到JS
        energy.bind('goFunction', (arg1, arg2) => {
            return window.energy.call('goFunction', arg1, arg2);
        });
    `, "", 0)
})

// 处理JS调用
window.Chromium().RegisterJsCallback("goFunction", func(data string) string {
    return "Go处理后的结果: " + data
})

JavaScript端:

// 调用Go函数
energy.goFunction("参数", (result) => {
    console.log("收到Go返回:", result);
});

// Go调用JS函数
window.jsFunction = function(data) {
    console.log("来自Go的调用:", data);
    return "JS返回值";
}

4. 打包资源

使用go:embed嵌入前端资源:

import _ "embed"

//go:embed resources/*
var resources embed.FS

原生UI框架对比

Fyne示例

package main

import (
	"fyne.io/fyne/v2/app"
	"fyne.io/fyne/v2/container"
	"fyne.io/fyne/v2/widget"
)

func main() {
	a := app.New()
	w := a.NewWindow("Fyne示例")
	
	hello := widget.NewLabel("Hello Fyne!")
	button := widget.NewButton("点击", func() {
		hello.SetText("欢迎使用Fyne!")
	})
	
	w.SetContent(container.NewVBox(
		hello,
		button,
	))
	
	w.ShowAndRun()
}

选择建议

  1. 选择Energy/CEF框架当:

    • 需要复杂UI效果
    • 已有Web开发经验
    • 需要Web技术栈的灵活性
    • 应用体积不是主要考虑因素
  2. 选择原生UI框架当:

    • 追求轻量级
    • 需要原生外观和性能
    • 应用体积是关键因素
    • 简单界面需求

Energy框架特别适合需要Web技术构建复杂UI但后端需要Golang性能的场景,它提供了完整的CEF功能封装和方便的Go-JS互操作能力。

回到顶部