golang构建PC客户端的一些实践
前言
我的技术栈主要是vue3、go、java等。
前端对界面的表达力是最强的,所以暂不考虑原生相关的ui技术,如fyne、QT bind。
而单纯的基于web的跨端方案,虽然能提供一些基本的系统级操作,但对于自定义的底层需求还是需要go来处理。
我选的技术方案就落在了vue+go上,从原理上分为:
- 独立UI+websocket+底层Go:
electron
,tauri
- Go控制的UI+websocket+底层Go:
lorca
,webview
- Go完整打包的UI+jsBridge:
wails
但最终也是因为它打包太大、依赖安装经常失败、打包上也遇到不少坑,太过折腾就放弃了。
tauri https://tauri.studio/en/
底层由rust实现,UI渲染依赖于webview2或webkit,提供js api访问系统功能、以及和rust底层交互。
以前端开发为主视角,tauri的相关库放置于前端工程中的src-tauri文件,对前端项目的侵入性较小。
能打包成一个独立的程序,在OSX下测试的效果还不错。
但是在windows下搭建环境时会遇到依赖安装错误,打包工具是基于node的,过于折腾就先不去解决了(交叉编译的支持也在计划内)。
目前tauri发布了beta版本,go binding的支持还在计划内,所以如果我要以go为底层的话,只能采用websocket或http的通信方式。
tauri还计划发布android和ios版本,可以期待下。
lorca https://github.com/zserge/lorca
原理上是从go调用了chrome,然后启动了定制化的chrome界面,所以需要依赖chrome。
这是我用的比较多的一个,因为直接可以从go来控制启动关闭,加载页面等等。
缺点也很明显,开启应用本身是chrome的一个窗口,所以不能做过多的定制化。和go之间的通信,需要自行用websocket或http。
其兄弟项目 github.com/zserge/webview,提供了较多的定制功能,将webview内置。但是在编译打包时还是有一些坑,以及有些功能没找到用法(可能得用c++?),比如全屏。
wails https://wails.io/
和tauri类似,但是底层为go,而且是以go项目的主视角来打包,也是基于webview2或webkit。
目前推出v2版本,暂时只支持了windows的打包(在windows中需要webview2环境支持)。
v2的总体使用体验很不错,优势如下:
- 可以做到前后端分离开发,打包时只需要在go中引入前端打包好的dist资源即可。
- 提供了js和go之间的进程内通信。
- 打包工具是基于go的,基本能避免基于node打包时依赖安装的“劣根性”。目前在windows中打包运行测试很顺畅。
小劣势就是还在beta中,osx和linux的即将推出。有些浏览器的深度定制没有开放出来,比如webview2对不安全资源的访问权限问题,需要底层支持后开发配置出来,不过好在社区响应及时。
总结 我会持续关注wails和tauri的进展。
【golang构建PC客户端的一些实践】项目应用中,将从lorca逐步迁移到wails的方式中。
推荐阅读
- Flutter的ListView
- 三门问题(蒙提霍尔悖论)分析与Golang模拟
- 构建App(一)(框架与结构)
- 如何在手机上查看测试vue-cli构建的项目
- 用Go构建区块链——3.持久化和命令行
- 运用flutter|运用flutter 构建一个发布版(release)APK
- 8、Flask构建弹幕微电影网站-搭建后台页面-密码修改、主页控制面板
- 倾诉
- thinkphp3.2下实现阿里云视频点播实例(客户端JavaScript上传)
- 构建你的知识体系,让你学习效能倍增!