V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wangbenjun5
V2EX  ›  程序员

Golang 写桌面 GUI 应用的体验

  •  
  •   wangbenjun5 · 2021-08-08 23:37:50 +08:00 · 15993 次点击
    这是一个创建于 1207 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    Qt 一直都有这样,无论什么语言开发,你能找到的大部分都是 C++资料,因为这是 Qt 主流开发语言。
    yekern
        5
    yekern  
       2021-08-09 08:10:02 +08:00   ❤️ 1
    wails
    webview/webview + socket + sqweek/dialog
    跨平台啊 用系统内核 而不是像用 electron 打包出来那么大,做些常见应用还是比较简单的
    yekern
        6
    yekern  
       2021-08-09 08:13:00 +08:00
    zjsxwc
        7
    zjsxwc  
       2021-08-09 09:06:52 +08:00
    qt 都流行用 qml 写界面,也就是 js 。所以 qt 现在等于 js 。
    hatsuyuki
        8
    hatsuyuki  
       2021-08-09 09:17:57 +08:00
    @yekern Rust 方向还有个 tauri
    gongym
        9
    gongym  
       2021-08-09 09:27:37 +08:00
    govcl
    labulaka521
        10
    labulaka521  
       2021-08-09 09:50:16 +08:00 via iPhone
    gioui
    fireleaves
        11
    fireleaves  
       2021-08-09 09:52:13 +08:00
    go walk
    nieyujiang
        12
    nieyujiang  
       2021-08-09 09:54:16 +08:00 via iPhone
    硬让我选我会选 qt
    wangkai0351
        13
    wangkai0351  
       2021-08-09 09:59:51 +08:00
    electron 打包出来的东西很大+1,颠覆了 Windows 对其客户端应用的“期待”
    rekulas
        14
    rekulas  
       2021-08-09 10:04:53 +08:00
    如果不考虑跨平台的话,要不要试试 miniblink,内存占用几 M-几十 M,直接 HTML5 书写,跟 go 交互也简单
    https://github.com/del-xiong/miniblink
    ly841000
        15
    ly841000  
       2021-08-09 10:06:16 +08:00   ❤️ 3
    webview 写出来的应用无论是手机还是 PC 在流畅度、性能、资源占用、耗电方面都是垃圾,安卓手机内存搞到 8G 、12G,比主流 PC 还高,重量变半斤,webview 功不可没
    debuggerx
        16
    debuggerx  
       2021-08-09 10:09:48 +08:00
    讲个笑话:Flutter 刚出来那会儿,网上好多人认为 Flutter 不用 go 写是败笔……
    虽然总有大佬会说语言只是工具,但是不可否认,不同语言的语言特性导致其各有自己擅长和不适合的领域及应用场景
    such
        17
    such  
       2021-08-09 10:11:18 +08:00
    c++永远的神
    ipwx
        18
    ipwx  
       2021-08-09 10:15:10 +08:00
    @debuggerx 你永远叫不醒 go 神教
    6IbA2bj5ip3tK49j
        19
    6IbA2bj5ip3tK49j  
       2021-08-09 10:17:04 +08:00
    fyne 性能真的是太差了。号称原生,跑起来比 webkit 慢多了。
    jingslunt
        20
    jingslunt  
       2021-08-09 10:18:38 +08:00
    大厂都在写 gui 怎么到这里就不适用了?
    https://golangrepo.com/repo/ocornut-imgui
    idealhs
        21
    idealhs  
       2021-08-09 10:30:56 +08:00   ❤️ 1
    写 win32 gui,不用 C#想什么呢
    BuffDog
        22
    BuffDog  
       2021-08-09 10:38:32 +08:00
    桌面应用,winform wpf yyds
    效率第一
    LessonOne
        23
    LessonOne  
       2021-08-09 11:12:34 +08:00
    @jingslunt 大厂人多资源多
    iyear
        24
    iyear  
       2021-08-09 11:22:41 +08:00
    go 目前搞 gui 还是本地起个 server 比较实在
    wangbenjun5
        25
    wangbenjun5  
    OP
       2021-08-09 12:13:45 +08:00
    @zjsxwc qml 那个我更看不懂,好复杂。。。根本不是 js 啊
    wangbenjun5
        26
    wangbenjun5  
    OP
       2021-08-09 12:15:15 +08:00
    @xgfan 在我 Ubuntu 上面窗口缩放大小会花屏。。。QT 没有这个问题,据说 fyne 是基于 Opengl 的,底层应该也是 cgo 调用吧,只不过支持的组件太少,功能也简单。
    zjsxwc
        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 简直噩梦。
    koebehshian
        28
    koebehshian  
       2021-08-09 12:47:58 +08:00
    楼主说的那几个 GUI 库我也用过,确实难用。不过我发现一个好用的,就是会依赖 chrome 浏览器,但不依赖 cgo,叫 lorca 。
    Lemeng
        29
    Lemeng  
       2021-08-09 12:58:13 +08:00
    不好用放弃
    ysc3839
        30
    ysc3839  
       2021-08-09 12:58:20 +08:00 via Android
    @rekulas 之前我在另一个帖子里说过,miniblink 可惜的地方是它自己把自己限死在中文社区内。CEF 能成功大概不是因为它多好用,而是因为它推广、社区做得好,用的人多形成了良性循环。
    BeautifulSoap
        31
    BeautifulSoap  
       2021-08-09 13:03:02 +08:00 via Android
    用 go 写过 gui 的感想就是尽早放弃别和自己过不去。

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

    复杂咱就用 Flutter,照样舒适。
    tuomasi
        34
    tuomasi  
       2021-08-09 13:49:07 +08:00 via Android   ❤️ 1
    c#贼好用,c#写桌面软件就跟 js 写前端页面一样,c++都得靠边站,你还用 go,赶紧换吧
    Wincer
        35
    Wincer  
       2021-08-09 14:41:15 +08:00
    我之前也想写一个集成主流直播平台的软件,还考虑用什么语言写,考虑来考虑去干脆用 html 写了省事。
    Rorysky
        36
    Rorysky  
       2021-08-09 17:20:30 +08:00
    cs 架构
    rekulas
        37
    rekulas  
       2021-08-09 19:13:01 +08:00
    @ysc3839 同意你的看法,miniblink 闭源、开发团队精力不多、不跨平台、未全球性推广都决定了它很难真正流行起来,不过开发一些快捷的小工具,还是可以考虑下的,毕竟 go 的 gui 天生缺,做界面 HTML5 也具有天生优势 快&方便&人人都会一些
    rekulas
        38
    rekulas  
       2021-08-09 19:19:40 +08:00
    另外,如果可以接受内存大点的话,go-astilectron 是个不错的选择,基于 electron 的,开发个几个小工具了,比较方便没有什么坑
    hez2010
        39
    hez2010  
       2021-08-09 22:15:54 +08:00
    go 自身的设计导致根本不适合用来开发 GUI,因为缺了太多的东西,费尽力气好不容易画出个空白窗口,别人界面都快做完了。开发原生跨平台 GUI 的话(不是 web 套壳那种)还得看 C#( Avalonia 、MAUI 等等) 或者 C++( QT 等等)。
    cond0r
        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
    iPhone9
        41
    iPhone9  
       2021-08-10 07:17:45 +08:00
    go 本来就是 google 用来为自家公司特定业务服务的,难成大器。
    jiegege
        42
    jiegege  
       2021-08-14 17:03:04 +08:00
    我也想弄个类似的,就是不知道 mpv 怎么加上弹幕.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1228 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 18:12 · PVG 02:12 · LAX 10:12 · JFK 13:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.