golang跨平台原生UI与Chromium嵌入式框架插件库energy的使用
Golang跨平台原生UI与Chromium嵌入式框架插件库Energy的使用
项目介绍
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服务
快速开始
三步运行一个简单应用
- 安装开发环境:
energy install
- 初始化应用:
energy init
- 运行应用:
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)
}
构建
- 构建:
energy build
- 打包:
energy package
- 打包类型:
- windows: 使用
nsis
创建exe安装包 - linux: 使用
dpkg
创建deb安装包 - macos: 生成
xxx.app
- windows: 使用
系统支持
OS | 32-bit | 64-bit |
---|---|---|
Windows | ✔️ | ✔️ |
MacOSX (Intel) | ❌ | ✔️ |
MacOS (Apple Silicon) | ❌ | ✔️ |
Linux | ✔️ | ✔️ |
Linux ARM | ✔️ | ✔️ |
项目截图
Windows-10
Windows-7 32 & 64
Windows-XP-SP3
Linux - Deepin
Linux - Kylin ARM
Linux - Ubuntu
MacOSX
更多关于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应用主要有两种方式:
- 原生UI框架:如Fyne、Walk、Lorca等,使用各平台原生组件
- 嵌入式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()
}
选择建议
-
选择Energy/CEF框架当:
- 需要复杂UI效果
- 已有Web开发经验
- 需要Web技术栈的灵活性
- 应用体积不是主要考虑因素
-
选择原生UI框架当:
- 追求轻量级
- 需要原生外观和性能
- 应用体积是关键因素
- 简单界面需求
Energy框架特别适合需要Web技术构建复杂UI但后端需要Golang性能的场景,它提供了完整的CEF功能封装和方便的Go-JS互操作能力。