<p align="center">
<img src="https://assets.yanghy.cn/energy-doc/energy-icon.png">
</p>
# Energy 是Go基于CEF构建桌面应用的框架
### [简介](https://energy.yanghy.cn/#/course/6342d92c401bfe4d0cdf6065/6350f94ca749ba0318943f25)
> [energy](https://github.com/energye/energy) 是 Go 基于 CEF(Chromium Embedded Framework)
> 开发的框架,内嵌 [CEF](https://bitbucket.org/chromiumembedded/cef) 二进制
>
> 使用 Go 和 Web 端技术 ( HTML + CSS + JavaScript ) 构建支持Windows, Linux, MacOS跨平台桌面应用
>
> 需要会前端技术栈和略懂Go语言
### 特性
> - 开发环境简单,编译速度快,只需要Go开发环境和Energy依赖的CEF二进制框架
> - 跨平台: 一套代码可以打包成 Windows, 国产UOS、Deepin、Kylin, MacOS, Linux
> - 语言职责
>> - Go: Go负责窗口创建、CEF配置和功能实现、各种UI组件创建、系统低层调用,和JS处理不了的功能如: 文件流、安全加密、高性能处理等等,可作为纯后端开发
>> - Web: HTML + CSS + JavaScript 负责客户端界面的功能, 做出任意你想要的界面,可作为纯前端开发
> - 前端技术: 支持主流前端框架例如:Vue、React、Angular, 或纯HTML+CSS等等
> - 事件驱动: 高性能事件驱动, 基于IPC通信,实现Go和Web端很方便功能调用以及数据交互
#### 事件驱动 Go和Web交互
> - 在Go和Web技术基于IPC通信,可以在Go和Web交互数据、事件触发, 可以不使用 http 接口,就像调用语言本身函数一样简单
> - 在Go中定义JS绑定类型变量,提供给Web端JS使用,实现Go变量或结构对象数据同步
> - 在JS监听事件,在Go中触发JS事件,以达到Go调用JS函数和数据传递
> - 在Go监听事件,在JS中触发Go事件,以达到JS调用Go函数和数据传递
### [开发环境](https://energy.yanghy.cn/#/course/6342d92c401bfe4d0cdf6065/63511b14a749ba0318943f3a)
#### 基本需求
> - golang >= 1.18
> - energy 开发环境
>
> 使用 energy 命令行工具自动安装开发环境
>
> 获取 [energy](https://github.com/energye/energy)
> 项目,或直接使用预编译命令行工具 [下载地址](https://energy.yanghy.cn/#/course/6342d92c401bfe4d0cdf6065/63511b14a749ba0318943f3a)
> 1. go get github.com/energye/energy
>
> 进入 [energy](https://github.com/energye/energy) 命令行目录
> 2. cd energy/cmd/energy
>
> 安装命令行工具
> 3. go install
>
> 执行安装命令
> 4. energy install .
### 入门指南 - [传送门](https://energy.yanghy.cn)
* [教程](https://energy.yanghy.cn/#/course/6342d92c401bfe4d0cdf6065/6350f94ca749ba0318943f25)
* [示例](https://energy.yanghy.cn/#/example/6342d986401bfe4d0cdf6067/634d3bd5a749ba0318943eb6)
* [文档](https://energy.yanghy.cn/#/document/6342d9a4401bfe4d0cdf6069/0)
### 快速入门
> 使用 [energy-cmd](https://energy.yanghy.cn/#/course/6342d92c401bfe4d0cdf6065/63511b14a749ba0318943f3a) 命令行工具自动安装环境依赖 `energy install .`
>
> 以example/simple示例为例
>
> 更新最新发布版本依赖
>
> 2. go mod tidy
>
> 在Goland(或其它开发工具)中运行simple 或 go run simple.go
### example/simple 示例代码
```go
package main
import (
"github.com/energye/energy/v2/cef"
)
func main() {
//全局初始化 每个应用都必须调用的
cef.GlobalInit(nil, nil)
//创建应用
cefApp := cef.NewApplication()
//指定一个URL地址,或本地html文件目录
cef.BrowserWindow.Config.Url = "https://energy.yanghy.cn"
//运行应用
cef.Run(cefApp)
}
```
---
### 系统支持
![Windows](https://img.shields.io/badge/windows-supported-success.svg?logo=Windows&logoColor=blue)
![MacOSX](https://img.shields.io/badge/MacOSX-supported-success.svg?logo=MacOS)
![Linux](https://img.shields.io/badge/Linux-supported-success.svg?logo=Linux&logoColor=red)
##### 开源地址
- [Github](https://github.com/energye/energy)
- [Gitee](https://gitee.com/energye/energy)
##### 官网
- [Energy](https://energy.yanghy.cn/#/)
我是Energy之后才听大家说,Electron 我没用过,后来试过仅限于demo, 未深入了解.
Electron 使用 node ,Energy 使用 go。具体优势比较, 语言方面? 其它我还真不知道.
Energy 基于 golcl 和 CEF , golcl 是基于lazarus的 lcl 组件库, lcl 有大多数的系统原生组件 , 在这点上 electron 我不知道什么样.
最后 Energy 结合了 LCL(系统原生UI)和CEF,在Energy中只使用LCL可以开发小巧的PC端软件,也可使用LCL+CEF开发出漂亮的软件。
其它方面、稳定性、扩展、这些问题还需要时间累积来发现和修复。
#2