
之前闲着无事,用 Go 的一个开源 GUI 库 fyne 撸了一个小工具,就是一个通过抓取虎牙直播源地址,并且调用本地的播放器比如 MPV 看直播的东西。
刚开始,觉得 Go 写 GUI 还挺有意思,但是写着写着发现想实现一个稍微复杂的 UI 和交互,真的很难。。。fyne 这个库本身的自带的组件功能很少,简单东西可以搞一搞,稍微复杂点无能为力了。
后来又去看了看一个 QT 绑定库 therecipe/qt,以前没用过 qt,发现这个库贼难用,一个方法点进去连注释都没有,全是 rpc 调用,我都看懵了,找了下 QT 的文档,全是 C++的写法,和这个库的调用又不是完全一样的,折腾了一下,看了那一些 example,又是 QML 啥的,搞蒙了,总结就是发现没法用,除非你以前就会 QT 这一套东西另说。
总结,Go 在开发桌面 GUI 应用这块依然是个玩具,自娱自乐玩一玩可以。。。桌面原生 GUI 开发还得看 C++啊

1 zgcwkj 2021-08-09 00:46:40 +08:00 C#:??? |
2 piping 2021-08-09 00:58:10 +08:00 桌面 GUI 的未来市场份额很大一部分要归 electron 了,用不着 C++ |
3 Trim21 2021-08-09 01:23:31 +08:00 via Android 不如起个 http server 再写个 Web ui,go 写 gui 真的折磨… |
4 janxin 2021-08-09 07:17:36 +08:00 via iPhone fyne 太简单,写个小工具还行,复杂的就全部需要自己封装 Qt 一直都有这样,无论什么语言开发,你能找到的大部分都是 C++资料,因为这是 Qt 主流开发语言。 |
5 yekern 2021-08-09 08:10:02 +08:00 wails webview/webview + socket + sqweek/dialog 跨平台啊 用系统内核 而不是像用 electron 打包出来那么大,做些常见应用还是比较简单的 |
6 yekern 2021-08-09 08:13:00 +08:00 补一张图  |
7 zjsxwc 2021-08-09 09:06:52 +08:00 qt 都流行用 qml 写界面,也就是 js 。所以 qt 现在等于 js 。 |
9 gongym 2021-08-09 09:27:37 +08:00 govcl |
10 labulaka521 2021-08-09 09:50:16 +08:00 via iPhone gioui |
11 fireleaves 2021-08-09 09:52:13 +08:00 go walk |
12 ZeoKarl 2021-08-09 09:54:16 +08:00 via iPhone 硬让我选我会选 qt |
13 wangkai0351 2021-08-09 09:59:51 +08:00 electron 打包出来的东西很大+1,颠覆了 Windows 对其客户端应用的“期待” |
14 rekulas 2021-08-09 10:04:53 +08:00 如果不考虑跨平台的话,要不要试试 miniblink,内存占用几 M-几十 M,直接 HTML5 书写,跟 go 交互也简单 https://github.com/del-xiong/miniblink |
15 ly841000 2021-08-09 10:06:16 +08:00 webview 写出来的应用无论是手机还是 PC 在流畅度、性能、资源占用、耗电方面都是垃圾,安卓手机内存搞到 8G 、12G,比主流 PC 还高,重量变半斤,webview 功不可没 |
16 debuggerx 2021-08-09 10:09:48 +08:00 讲个笑话:Flutter 刚出来那会儿,网上好多人认为 Flutter 不用 go 写是败笔…… 虽然总有大佬会说语言只是工具,但是不可否认,不同语言的语言特性导致其各有自己擅长和不适合的领域及应用场景 |
17 such 2021-08-09 10:11:18 +08:00 c++永远的神 |
19 6IbA2bj5ip3tK49j 2021-08-09 10:17:04 +08:00 fyne 性能真的是太差了。号称原生,跑起来比 webkit 慢多了。 |
20 jingslunt 2021-08-09 10:18:38 +08:00 大厂都在写 gui 怎么到这里就不适用了? https://golangrepo.com/repo/ocornut-imgui |
21 idealhs 2021-08-09 10:30:56 +08:00 写 win32 gui,不用 C#想什么呢 |
22 BuffDog 2021-08-09 10:38:32 +08:00 桌面应用,winform wpf yyds 效率第一 |
24 iyear 2021-08-09 11:22:41 +08:00 go 目前搞 gui 还是本地起个 server 比较实在 |
25 wangbenjun5 OP @zjsxwc qml 那个我更看不懂,好复杂。。。根本不是 js 啊 |
26 wangbenjun5 OP @xgfan 在我 Ubuntu 上面窗口缩放大小会花屏。。。QT 没有这个问题,据说 fyne 是基于 Opengl 的,底层应该也是 cgo 调用吧,只不过支持的组件太少,功能也简单。 |
27 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 简直噩梦。 |
28 koebehshian 2021-08-09 12:47:58 +08:00 楼主说的那几个 GUI 库我也用过,确实难用。不过我发现一个好用的,就是会依赖 chrome 浏览器,但不依赖 cgo,叫 lorca 。 |
29 Lemeng 2021-08-09 12:58:13 +08:00 不好用放弃 |
30 ysc3839 2021-08-09 12:58:20 +08:00 via Android @rekulas 之前我在另一个帖子里说过,miniblink 可惜的地方是它自己把自己限死在中文社区内。CEF 能成功大概不是因为它多好用,而是因为它推广、社区做得好,用的人多形成了良性循环。 |
31 BeautifulSoap 2021-08-09 13:03:02 +08:00 via Android 用 go 写过 gui 的感想就是尽早放弃别和自己过不去。 还不如 go 写 rpc 后端,然后用其他语言的 gui 调用 go 的 rpc 来的实在 |
32 wangxn 2021-08-09 13:29:18 +08:00 via iPhone Flutter 在这方面的前景不错 |
33 kwanzaa 2021-08-09 13:34:11 +08:00 写简单的东西很香,打包也小。 我觉得在以上这方面用 Go 的话优势不小。 复杂咱就用 Flutter,照样舒适。 |
34 tuomasi 2021-08-09 13:49:07 +08:00 via Android c#贼好用,c#写桌面软件就跟 js 写前端页面一样,c++都得靠边站,你还用 go,赶紧换吧 |
35 Wincer 2021-08-09 14:41:15 +08:00 我之前也想写一个集成主流直播平台的软件,还考虑用什么语言写,考虑来考虑去干脆用 html 写了省事。 |
36 Rorysky 2021-08-09 17:20:30 +08:00 cs 架构 |
37 rekulas 2021-08-09 19:13:01 +08:00 @ysc3839 同意你的看法,miniblink 闭源、开发团队精力不多、不跨平台、未全球性推广都决定了它很难真正流行起来,不过开发一些快捷的小工具,还是可以考虑下的,毕竟 go 的 gui 天生缺,做界面 HTML5 也具有天生优势 快&方便&人人都会一些 |
38 rekulas 2021-08-09 19:19:40 +08:00 另外,如果可以接受内存大点的话,go-astilectron 是个不错的选择,基于 electron 的,开发个几个小工具了,比较方便没有什么坑 |
39 hez2010 2021-08-09 22:15:54 +08:00 go 自身的设计导致根本不适合用来开发 GUI,因为缺了太多的东西,费尽力气好不容易画出个空白窗口,别人界面都快做完了。开发原生跨平台 GUI 的话(不是 web 套壳那种)还得看 C#( Avalonia 、MAUI 等等) 或者 C++( QT 等等)。 |
40 cond0r 2021-08-10 01:18:43 +08:00 via iPhone fyne 写复杂的 ui 真蛋疼 可以试试 wails.app 也是 webui 套壳 但是不打包浏览器进去 调用系统浏览器 打包出来文件一般 10m 左右 之前写了个小工具感觉还可以,fyne 也试过 写写单页的倒还好 https://aq.mk/index.php/archives/111.html |
41 iPhone9 2021-08-10 07:17:45 +08:00 go 本来就是 google 用来为自家公司特定业务服务的,难成大器。 |
42 jiegege 2021-08-14 17:03:04 +08:00 我也想弄个类似的,就是不知道 mpv 怎么加上弹幕. |