• 请不要在回答技术问题时复制粘贴 AI 生成的内容
wangbenjun5
V2EX  ›  程序员

Golang 写桌面 GUI 应用的体验

  •  
  •   wangbenjun5 · Aug 8, 2021 · 18115 views
    This topic created in 1919 days ago, the information mentioned may be changed or developed.

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

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

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

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

    42 replies  •  2021-08-14 17:03:04 +08:00
    zgcwkj
    zgcwkj
    Aug 9, 2021❤️2
    1
    C#:???
    piping
    piping
    Aug 9, 2021
    2
    桌面 GUI 的未来市场份额很大一部分要归 electron 了,用不着 C++
    Trim21
    Trim21
    Aug 9, 2021 via Android❤️1
    3
    不如起个 http server 再写个 Web ui,go 写 gui 真的折磨…
    janxin
    janxin
    Aug 9, 2021 via iPhone
    4
    fyne 太简单,写个小工具还行,复杂的就全部需要自己封装

    Qt 一直都有这样,无论什么语言开发,你能找到的大部分都是 C++资料,因为这是 Qt 主流开发语言。
    yekern
    yekern
    Aug 9, 2021❤️1
    5
    wails
    webview/webview + socket + sqweek/dialog
    跨平台啊 用系统内核 而不是像用 electron 打包出来那么大,做些常见应用还是比较简单的
    zjsxwc
    zjsxwc
    Aug 9, 2021
    7
    qt 都流行用 qml 写界面,也就是 js 。所以 qt 现在等于 js 。
    hatsuyuki
    hatsuyuki
    Aug 9, 2021
    8
    @yekern Rust 方向还有个 tauri
    gongym
    gongym
    Aug 9, 2021
    9
    govcl
    labulaka521
    labulaka521
    Aug 9, 2021 via iPhone
    10
    gioui
    fireleaves
    fireleaves
    Aug 9, 2021
    11
    go walk
    ZeoKarl
    ZeoKarl
    Aug 9, 2021 via iPhone
    12
    硬让我选我会选 qt
    wangkai0351
    wangkai0351
    Aug 9, 2021
    13
    electron 打包出来的东西很大+1,颠覆了 Windows 对其客户端应用的“期待”
    rekulas
    rekulas
    Aug 9, 2021
    14
    如果不考虑跨平台的话,要不要试试 miniblink,内存占用几 M-几十 M,直接 HTML5 书写,跟 go 交互也简单
    https://github.com/del-xiong/miniblink
    ly841000
    ly841000
    Aug 9, 2021❤️3
    15
    webview 写出来的应用无论是手机还是 PC 在流畅度、性能、资源占用、耗电方面都是垃圾,安卓手机内存搞到 8G 、12G,比主流 PC 还高,重量变半斤,webview 功不可没
    debuggerx
    debuggerx
    Aug 9, 2021
    16
    讲个笑话:Flutter 刚出来那会儿,网上好多人认为 Flutter 不用 go 写是败笔……
    虽然总有大佬会说语言只是工具,但是不可否认,不同语言的语言特性导致其各有自己擅长和不适合的领域及应用场景
    such
    such
    Aug 9, 2021
    17
    c++永远的神
    ipwx
    ipwx
    Aug 9, 2021
    18
    @debuggerx 你永远叫不醒 go 神教
    6IbA2bj5ip3tK49j
    6IbA2bj5ip3tK49j
    Aug 9, 2021
    19
    fyne 性能真的是太差了。号称原生,跑起来比 webkit 慢多了。
    jingslunt
    jingslunt
    Aug 9, 2021
    20
    大厂都在写 gui 怎么到这里就不适用了?
    https://golangrepo.com/repo/ocornut-imgui
    idealhs
    idealhs
    Aug 9, 2021❤️1
    21
    写 win32 gui,不用 C#想什么呢
    BuffDog
    BuffDog
    Aug 9, 2021
    22
    桌面应用,winform wpf yyds
    效率第一
    LessonOne
    LessonOne
    Aug 9, 2021
    23
    @jingslunt 大厂人多资源多
    iyear
    iyear
    Aug 9, 2021
    24
    go 目前搞 gui 还是本地起个 server 比较实在
    wangbenjun5
    wangbenjun5
    OP
    Aug 9, 2021
    25
    @zjsxwc qml 那个我更看不懂,好复杂。。。根本不是 js 啊
    wangbenjun5
    wangbenjun5
    OP
    Aug 9, 2021
    26
    @xgfan 在我 Ubuntu 上面窗口缩放大小会花屏。。。QT 没有这个问题,据说 fyne 是基于 Opengl 的,底层应该也是 cgo 调用吧,只不过支持的组件太少,功能也简单。
    zjsxwc
    zjsxwc
    Aug 9, 2021
    27
    @wangbenjun5
    https://doc.qt.io/qt-5/qmlfirststeps.html

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

    还不如 go 写 rpc 后端,然后用其他语言的 gui 调用 go 的 rpc 来的实在
    wangxn
    wangxn
    Aug 9, 2021 via iPhone
    32
    Flutter 在这方面的前景不错
    kwanzaa
    kwanzaa
    Aug 9, 2021
    33
    写简单的东西很香,打包也小。
    我觉得在以上这方面用 Go 的话优势不小。

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

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

    https://aq.mk/index.php/archives/111.html
    iPhone9
    iPhone9
    Aug 10, 2021
    41
    go 本来就是 google 用来为自家公司特定业务服务的,难成大器。
    jiegege
    jiegege
    Aug 14, 2021
    42
    我也想弄个类似的,就是不知道 mpv 怎么加上弹幕.
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2856 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 114ms · UTC 00:46 · PVG 08:46 · LAX 16:46 · JFK 19:46
    ♥ Do have faith in what you're doing.