Golang 写桌面 GUI 应用的体验

2021-08-08 23:37:50 +08:00
 wangbenjun5

之前闲着无事,用 Go 的一个开源 GUI 库 fyne 撸了一个小工具,就是一个通过抓取虎牙直播源地址,并且调用本地的播放器比如 MPV 看直播的东西。

刚开始,觉得 Go 写 GUI 还挺有意思,但是写着写着发现想实现一个稍微复杂的 UI 和交互,真的很难。。。fyne 这个库本身的自带的组件功能很少,简单东西可以搞一搞,稍微复杂点无能为力了。

后来又去看了看一个 QT 绑定库 therecipe/qt,以前没用过 qt,发现这个库贼难用,一个方法点进去连注释都没有,全是 rpc 调用,我都看懵了,找了下 QT 的文档,全是 C++的写法,和这个库的调用又不是完全一样的,折腾了一下,看了那一些 example,又是 QML 啥的,搞蒙了,总结就是发现没法用,除非你以前就会 QT 这一套东西另说。

总结,Go 在开发桌面 GUI 应用这块依然是个玩具,自娱自乐玩一玩可以。。。桌面原生 GUI 开发还得看 C++啊

16000 次点击
所在节点    程序员
42 条回复
idealhs
2021-08-09 10:30:56 +08:00
写 win32 gui,不用 C#想什么呢
BuffDog
2021-08-09 10:38:32 +08:00
桌面应用,winform wpf yyds
效率第一
LessonOne
2021-08-09 11:12:34 +08:00
@jingslunt 大厂人多资源多
iyear
2021-08-09 11:22:41 +08:00
go 目前搞 gui 还是本地起个 server 比较实在
wangbenjun5
2021-08-09 12:13:45 +08:00
@zjsxwc qml 那个我更看不懂,好复杂。。。根本不是 js 啊
wangbenjun5
2021-08-09 12:15:15 +08:00
@xgfan 在我 Ubuntu 上面窗口缩放大小会花屏。。。QT 没有这个问题,据说 fyne 是基于 Opengl 的,底层应该也是 cgo 调用吧,只不过支持的组件太少,功能也简单。
zjsxwc
2021-08-09 12:23:06 +08:00
@wangbenjun5
https://doc.qt.io/qt-5/qmlfirststeps.html

用 qml js 写界面更简单了,声明式代码写 ui 、mvvm 数据绑定( Property Bindings ),组件自定义与复用。
对比之下,用 c++写 ui 简直噩梦。
koebehshian
2021-08-09 12:47:58 +08:00
楼主说的那几个 GUI 库我也用过,确实难用。不过我发现一个好用的,就是会依赖 chrome 浏览器,但不依赖 cgo,叫 lorca 。
Lemeng
2021-08-09 12:58:13 +08:00
不好用放弃
ysc3839
2021-08-09 12:58:20 +08:00
@rekulas 之前我在另一个帖子里说过,miniblink 可惜的地方是它自己把自己限死在中文社区内。CEF 能成功大概不是因为它多好用,而是因为它推广、社区做得好,用的人多形成了良性循环。
BeautifulSoap
2021-08-09 13:03:02 +08:00
用 go 写过 gui 的感想就是尽早放弃别和自己过不去。

还不如 go 写 rpc 后端,然后用其他语言的 gui 调用 go 的 rpc 来的实在
wangxn
2021-08-09 13:29:18 +08:00
Flutter 在这方面的前景不错
kwanzaa
2021-08-09 13:34:11 +08:00
写简单的东西很香,打包也小。
我觉得在以上这方面用 Go 的话优势不小。

复杂咱就用 Flutter,照样舒适。
tuomasi
2021-08-09 13:49:07 +08:00
c#贼好用,c#写桌面软件就跟 js 写前端页面一样,c++都得靠边站,你还用 go,赶紧换吧
Wincer
2021-08-09 14:41:15 +08:00
我之前也想写一个集成主流直播平台的软件,还考虑用什么语言写,考虑来考虑去干脆用 html 写了省事。
Rorysky
2021-08-09 17:20:30 +08:00
cs 架构
rekulas
2021-08-09 19:13:01 +08:00
@ysc3839 同意你的看法,miniblink 闭源、开发团队精力不多、不跨平台、未全球性推广都决定了它很难真正流行起来,不过开发一些快捷的小工具,还是可以考虑下的,毕竟 go 的 gui 天生缺,做界面 HTML5 也具有天生优势 快&方便&人人都会一些
rekulas
2021-08-09 19:19:40 +08:00
另外,如果可以接受内存大点的话,go-astilectron 是个不错的选择,基于 electron 的,开发个几个小工具了,比较方便没有什么坑
hez2010
2021-08-09 22:15:54 +08:00
go 自身的设计导致根本不适合用来开发 GUI,因为缺了太多的东西,费尽力气好不容易画出个空白窗口,别人界面都快做完了。开发原生跨平台 GUI 的话(不是 web 套壳那种)还得看 C#( Avalonia 、MAUI 等等) 或者 C++( QT 等等)。
cond0r
2021-08-10 01:18:43 +08:00
fyne 写复杂的 ui 真蛋疼 可以试试 wails.app 也是 webui 套壳 但是不打包浏览器进去 调用系统浏览器 打包出来文件一般 10m 左右

之前写了个小工具感觉还可以,fyne 也试过 写写单页的倒还好

https://aq.mk/index.php/archives/111.html

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/794478

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX