V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
itakeman
V2EX  ›  程序员

分享一下新发现的 go 语言 GUI 框架 cogentcore

  •  
  •   itakeman · 2 天前 · 4140 次点击

    GitHub 上这么介绍的:一个免费的开源框架,用于构建强大、快速、优雅的 2D 和 3D 应用程序,这些应用程序可在 macOS 、Windows 、Linux 、iOS 、Android 和 Web 上运行,只需一个 Go 代码库,即可编写一次代码,随处运行。

    我看有一定的潜力,希望能替代 fyne ,感觉写出来的界面会比 fyne 、GioUI 美观很多

    https://github.com/cogentcore/core

    第 1 条附言  ·  2 天前
    想自己看 Demo 的小伙伴可以直接本地:
    go install cogentcore.org/core@main
    51 条回复    2025-10-01 14:53:57 +08:00
    aqtata
        1
    aqtata  
       2 天前   ❤️ 1
    我认为用 go 搞 UI 是条邪路
    itakeman
        2
    itakeman  
    OP
       2 天前
    @aqtata 我自己写着自己用用感觉还可以,看了这个框架,感觉 demo 看起来是美观舒适的
    miniliuke
        3
    miniliuke  
       2 天前   ❤️ 2
    @aqtata 其实我好奇除了 JS/TS ,什么语言做 UI 不是条邪路,或者说什么语言特性是对 UI 程序比较友好的
    itakeman
        4
    itakeman  
    OP
       2 天前
    @miniliuke ![Demo]( )

    看起来还可以
    fds
        5
    fds  
       2 天前
    哇,好全能呀!就是回调形式的语法不太喜欢,但 UI 不用回调似乎也不合理。
    itakeman
        6
    itakeman  
    OP
       2 天前
    @fds 对的,我感觉 UI 也简洁好看



    xtreme1
        7
    xtreme1  
       2 天前
    @miniliuke #3 他指的应该是 goroutine 每次 native 调用都必须 pin 到一个系统线程上再构建出 native 栈, 假如单搞个系统线程跑事件循环, 用 js 也没差的. go 这一块确实有自己的劣势在的.
    guiyumin
        8
    guiyumin  
       2 天前
    wails 不好吗
    不挺好的吗
    itakeman
        9
    itakeman  
    OP
       2 天前
    @guiyumin 不会写 js 、css 、html 那一套,wails 好像还不支持安卓、ios
    shadowyue
        10
    shadowyue  
       2 天前
    我觉得抛开 HTML 和 CSS 做 GUI 不是理智选择,这就是当下事实上的编写 UI 最主流的方式,无论谁来了都打不过。

    如果不喜欢 JS 换成别的语言那还是行得通,完全抛开 HTML 和 CSS 等于抛弃绝大部分潜在用户。
    yangheng4922
        11
    yangheng4922  
       2 天前
    有点卡
    wh469012917
        12
    wh469012917  
       2 天前   ❤️ 1
    @shadowyue 我们公司刚开始用 electron ,后面因为性能问题,改用用 QT ,做桌面端 GUI ,完全抛弃了 js ,所以要看场景,不能绝对
    dbskcnc
        13
    dbskcnc  
       2 天前
    目前 golang 的界面库还是算了,基本都是 toy 级别的,基本的 Ime 都没处理好,涉及视频更是直接完蛋
    itakeman
        14
    itakeman  
    OP
       2 天前 via Android
    @shadowyue 个人玩玩,没有时间精力专门去学 css 、js
    @dbskcnc 自己用用,感觉还可以,同样界面,编译的文件大小只相当于 fyne 的三分之一左右
    Z1076
        15
    Z1076  
       2 天前   ❤️ 1
    好东西, 最近正好需要。
    itakeman
        16
    itakeman  
    OP
       2 天前 via Android
    @Z1076 赶紧试试,打包的文件只有 fyne 三分一大小
    tempvar
        17
    tempvar  
       2 天前   ❤️ 1
    @itakeman 这是我试过所有的 go gui 后觉得最有潜力的,个人觉得 fyne 最拉
    millken
        18
    millken  
       2 天前
    研究了很多 Golang UI 库,最终发现还是使用 WEB 构建 UI 是王道。
    iorilu
        19
    iorilu  
       2 天前   ❤️ 1
    说真的, 我试了不少 gui 库

    最后总结就是, 如果真想做产品, 长期升级迭代的, 就两种选择

    1. 原生 gui, 比如 qt, 或 python pyqt 等 flutter 也算把, 如果愿意学的话, 另外就是微软哪些
    2. webview 那套, 这个其实每个语言基本都有, electron, wails, tauri, pywebview 等等
    crackidz
        20
    crackidz  
       2 天前
    @shadowyue 其实这个框架就是包的 JS+CSS...
    anivie
        21
    anivie  
       2 天前
    @iorilu 长期迭代 pyqt ?
    mogita
        22
    mogita  
       2 天前 via iPhone
    多一个选择永远不是坏事。
    itakeman
        23
    itakeman  
    OP
       2 天前
    @tempvar 你也觉得这个框架潜力不错吧
    bbbblue
        24
    bbbblue  
       2 天前
    如果是要长期主力写还是 electron 吧。。
    之前学 maui 的经历告诉我。。移动跨平台可能可以用。。 但是移动+桌面端跨平台 快跑
    用浏览器吧 浏览器是你最好的朋友 就是他比较吃内存。。。
    Leon6868
        25
    Leon6868  
       1 天前
    看 UI ,这个技术栈是 go+flutter 吧
    可以看看我前几个月发的讨论贴 https://v2ex.com/t/1142560 ,个人认为 webview 就是 GUI 最优解
    itakeman
        26
    itakeman  
    OP
       1 天前
    @Leon6868 不会 web 技术,还是喜欢原生
    itakeman
        27
    itakeman  
    OP
       1 天前
    @Leon6868 不是 flutter
    Leon6868
        28
    Leon6868  
       1 天前   ❤️ 1
    @itakeman #27 还真不是,是自绘,这套搞不好还能用在嵌入式上,虽然现在性能不太行,但是勇气可嘉
    Leon6868
        29
    Leon6868  
       1 天前   ❤️ 1
    @itakeman #27 甚至有路由系统,玩真的!这回真的是小瞧它了。
    我觉得加一个 DSL ,模仿一下 jsx 语法,会很香
    dearmymy
        30
    dearmymy  
       1 天前
    @fds ui 就是适合用协程,以前写 mfc 各种回调烦死了。
    itakeman
        31
    itakeman  
    OP
       1 天前 via Android
    @Leon6868 目前 fyne 写的项目,用这个重写,小了三倍大小,我感觉还行。我我也在观望后续
    itakeman
        32
    itakeman  
    OP
       1 天前 via Android
    kuanat
        33
    kuanat  
       1 天前
    是不是该用跨平台框架来写 ui 是个哲学问题,即便你的立场为是,还是要继续抉择,要每个平台都用相同的(非原生风格)自定义 ui ,还是要每个平台上用原生的 ui 。基本上后者都是走浏览器了,因为没人或者团队能承担得起这样的维护成本。

    在跨平台、自绘 ui 这个场景中,本质上要看在各个平台上底层用的什么 api ,楼上有人提到 go 的 goroutine 与系统线程 pinning 相关的硬伤,这个确实无解,因为现在的操作系统都是同样的 ui 线程逻辑。

    这种项目最大的困难是长期稳定地维护下去。而且通常来说好看、小巧和兼容性强是不可兼得的。以 win 为例,想要小就必然对接 win32 api ,用这个写现代界面,光一个 dpi 自适应就头大。到了 linux 又会面临是 gtk/qt 还是协议层造轮子,qt 因为授权大部分时间会被排除在外,如果是直接 wayland 协议开始写,且不说什么消息循环都要手动,就天天跟着上游更新都是很大的工程量。

    当然如果写的项目不需要长期维护,这类 ui 框架还是很有市场的。
    humbass
        34
    humbass  
       1 天前
    没有类似 html 中的类似 flex 的布局,写个界面是不是很蛋疼。
    iorilu
        35
    iorilu  
       1 天前
    @anivie 当然, qt 都 20 年了吧, 可以说 qt 是唯一的长期稳定跨平台 gui 框架

    真做什么商业软件, 用这个肯定没错, 当然 pyside 一样, 我是指 qt 这一类东西

    当然会 c++直接用原生 qt 也行
    rekulas
        36
    rekulas  
       1 天前   ❤️ 2
    我觉得很有意义,说 web 一把梭的写自用工具确实方便,但是现在随便什么小工具都用 electron 之类的写,开发速度确实快界面也好看,但说实话都反胃了,一个 json 序列化小工具都能占几百 M 内存,遇到这种我连安装的欲望都没有,而且很多软件体验非常差(相比原生开发,感觉 electron 系的出 bug 概率要大不少),包括大厂的-例如钉钉
    qt 虽然稳但是实在太重了,而且要做出好看点的 ui 难度可不小
    webview2 是个好东西但是难以跨平台,而且对环境有要求

    如果是做一些侧重后端处理,前端较为简单的软件,能跨平台的自绘 UI 库是个很不错的选择
    baton
        37
    baton  
       1 天前
    fyne 性能不行,多行文本框内容一多卡得很,我用 gotk3 速度快很多
    dimwoodxi27
        38
    dimwoodxi27  
       1 天前 via Android   ❤️ 1
    @rekulas 现在部分人就喜欢用 webview 到处生产垃圾,性能完全没法和自绘 UI 比,但不管什么需求条件就是一股脑吹 webview ,代码注入 内部资源篡改 CPU 和内存调度完全不合理等这些问题是根本不会去看,最经典的口头禅就是为了效率,为了效率拉一坨屎
    xxlsize
        39
    xxlsize  
       1 天前
    @rekulas wails 打包出来大小还接受
    tempvar
        40
    tempvar  
       1 天前
    @itakeman 是的,是两父子在搞的,我之前好像在那儿看过一个他儿子的分享,说要把这个当作以后的事业
    Leon6868
        41
    Leon6868  
       1 天前
    这个 demo 光是打开就耗费了 670+MB 的内存,稍微换几个页面就 1GB+了,只能说不如 Webview2
    kenilalexandra
        42
    kenilalexandra  
       1 天前
    我相信未来 Web 端才是主流,用什么 GUI
    elechi
        43
    elechi  
       1 天前
    ui 现在只要不是性能至上的,web 技术是王道,虽然我原来先很不屑 web ,用完以后真香
    bxd5812127
        44
    bxd5812127  
       1 天前
    @aqtata 条条邪路通罗马
    roundgis
        45
    roundgis  
       1 天前 via Android
    @bbbblue 内存这事好解决。加就行了。
    itakeman
        46
    itakeman  
    OP
       1 天前
    @Leon6868 看上面有人说包的 js+css ,如果你之前说的 gui 是最优解,我觉得对我这种不会 web 的未尝不是一个好的。内存大点就大点了,那些包的 web 的也是大的要死,起码这个自己还不用写 web 相关的,现在就等性能看看怎么样了
    sine2
        47
    sine2  
       1 天前
    从这个项目一开始就有关注,也提过 issue,感觉前期开发比较活跃,现在感觉进度放慢了。UI 有卡顿感,整体样式还是比较简洁好看的。
    mutalisk
        48
    mutalisk  
       1 天前
    fyne 的效率太烂了
    fanhed
        49
    fanhed  
       21 小时 14 分钟前
    go 的 UI 库能 pure go 吗? 如果不能的话, 那真的没啥必要用
    itakeman
        50
    itakeman  
    OP
       20 小时 12 分钟前
    @fanhed 这个不是纯 GO 嘛
    jqtmviyu
        51
    jqtmviyu  
       10 小时 3 分钟前
    我写小工具喜欢 wails, 体积小速度快. 缺点是内存会多 50-200M
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1182 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:57 · PVG 00:57 · LAX 09:57 · JFK 12:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.