Lorca: 打造轻量级HTML5桌面应用的利器
lorcaBuild cross-platform modern desktop apps in Go + HTML5项目地址:https://gitcode.com/gh_mirrors/lo/lorca
Lorca 是一个由纯Go语言编写的微小库,它的目标是让你在Go中构建现代HTML5桌面应用程序变得轻松。这个项目不将Chrome浏览器捆绑到应用程序包中,而是利用已经安装的版本作为UI层,提供了一种高效且简洁的方式来调用Go代码和操作用户界面。
功能亮点
- 精简API: 简单易用的纯Go库,无需cgo。
- 小巧可人: 应用程序体积通常仅为5-10MB。
- 性能与美观并存: 利用HTML/CSS创建漂亮界面,结合Go的强大性能和开发便捷性。
- 双向交互: 在JavaScript中调用Go函数,从Go中控制UI。
- 异步流畅: 支持两种语言之间的异步流程(Go中的async/await和Goroutines)。
- 灵活加载: 可以通过本地Web服务器或数据URL加载Web界面。
- 无头测试: 支持在无头模式下测试你的应用。
- 多窗口支持: 创建多个应用窗口。
- 打包定制: 支持跨平台打包,并可自定义应用图标。
请注意,Lorca有一些设计上的限制:
- 需要已安装Chrome/Chromium 70及以上版本。
- 目前无法控制Chrome窗口(如去除边框、透明度、位置或大小)。
- 不包含窗口菜单,但可以通过第三方库实现托盘菜单和原生对话框。
如果你希望拥有更多对浏览器窗口的控制权,可以考虑使用类似的webview库进行迁移。
使用示例
ui, _ := lorca.New("", "", 480, 320)
defer ui.Close()
// 将Go函数绑定到JS,Go函数可以在JS中表现为Promise
ui.Bind("add", func(a, b int) int { return a + b })
// 从Go中调用JS函数
n := ui.Eval(`Math.random()`).Float()
fmt.Println(n)
// JS调用Go,然后再回调回JS
m := ui.Eval(`add(2, 3)`).Int()
fmt.Println(m)
// 当浏览器窗口关闭时结束
<-ui.Done()
查看示例了解更多关于绑定函数和打包二进制文件的信息。
快速上手:Hello World
按照以下步骤运行Hello World示例:
cd examples/counter
go get
go run ./
工作原理
Lorca通过Chrome DevTools协议在Chrome实例下工作。首先,它会找到已安装的Chrome,启动远程调试实例并绑定到一个临时端口,从stderr
获取实际的WebSocket端点。然后,Lorca打开一个新的客户端连接到WebSocket服务器,并通过发送JSON消息来执行Chrome DevTools协议方法来控制Chrome。JavaScript函数在Chrome中执行,而Go函数则在Go运行环境中运行,并将返回值发送给Chrome。
名字背后的故事
Lorca的名字来源于西班牙诗人费德里科·加西亚·洛尔卡(Federico García Lorca)。据说他在被处决前看到了士兵头顶升起的朝阳,感叹道:“然而,太阳依然升起...”——这可能是他一首诗的开头,这也象征了Lorca项目的活力和持续发展。
许可证
代码遵循MIT许可,欢迎在商业项目中使用。
通过Lorca,你可以享受Go带来的高性能和便捷开发,同时利用HTML5的力量来创造引人注目的用户界面。现在就加入Lorca的世界,开启你的桌面应用开发之旅吧!
lorcaBuild cross-platform modern desktop apps in Go + HTML5项目地址:https://gitcode.com/gh_mirrors/lo/lorca