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

发现 autohotkey 这东西把 Go 写的命令行包装成 GUI 真是神器

  •  1
     
  •   itakeman · 2 天前 · 2608 次点击

    自己用 Go 语言写了一个命令行,感觉老是终端调用很麻烦,就想着包装成图形界面,后面看了以下 Go 语言有什么 Gui 框架

    以前试过 Godot+Go 语言写界面,那界面叫一个粗糙,中途也尝试过 aardio+Go 语言方式,老是出错,没耐心放弃了

    现在看了一下有:Fyne 、Walk 、GioUi 、wails , wails 还要会前端,我不会。。。。 Walk 不用会前端,好像很久没更新,放弃 Fyne 、GioUi 这两个可以开发 win 、linux 、mac 、安卓、ios ,还可以,后面弄了一下,各种出错

    一来火,谷歌狂找替代,发现 autohotkey 这东西还不错,就想看这东西能不能调用我的命令行,包装成界面,并且编译成 exe ,发现还可以哟。 594Kb 这打包成 exe 才 1.3M ,运行后占用内存 2.5M ,Upx 压缩一下后,exe 占用 594kb ,妙啊

    后面信心大涨,学着用 GioUi 重写,自己不够聪明各种报错,放弃。学着用 fyne 重写界面调用命令行,编译后 23Mb ,Upx 压缩后 8.61Mb ,运行占用内存 181.1Mb ,我天

    还是写成命令行+authotkey 这种香,

    有像我这样的兄弟吗?还有更骚的操作推荐吗?推荐一下,大家一起学习一下

    27 条回复    2025-09-26 12:44:02 +08:00
    iorilu
        1
    iorilu  
       2 天前
    现在前端都用 ai 写阿, 尤其你把命令行的接口告诉 ai, 很容易整出一个

    用 wails, 主要前端比较美观
    wakarimasen
        2
    wakarimasen  
       2 天前
    如果不需要分发直接起 HTTP server 然后访问 localhost:[port]
    Tomatopotato
        3
    Tomatopotato  
       2 天前
    可以看看 ahk 做出的界面吗
    Tomatopotato
        4
    Tomatopotato  
       2 天前
    @wakarimasen 这确实也是个思路。直接在 go 程序里写个服务器,写个简单前端网页,打包出 exe ,双击直接跳转浏览器,相当于用浏览器当 gui 了。
    roundgis
        5
    roundgis  
       2 天前 via Android
    我以前用过 autoit 写界面
    itakeman
        6
    itakeman  
    OP
       2 天前 via Android
    @iorilu 前端完全没摸过,主要不会啊,怎么个过程我都不清楚
    itakeman
        7
    itakeman  
    OP
       2 天前 via Android
    @Tomatopotato 懒得上传了,就写了一个控制智能开关的命令行,一个界面上带了开启关闭按钮,还有设置时间间隔、时间点定时开启关闭
    itakeman
        8
    itakeman  
    OP
       2 天前 via Android
    @roundgis 尝试 ai 写过,就这个 autohotkey 运行起来了,打包也小,我就感觉挺满意了
    itakeman
        9
    itakeman  
    OP
       2 天前 via Android
    @wakarimasen 浏览器访问也不是很方便,我感觉就想着写着界面,最好安卓、win 能一起就更好了
    Donduck
        10
    Donduck  
       2 天前
    AHK 也不是一个跨平台的东西啊
    itakeman
        11
    itakeman  
    OP
       2 天前 via Android
    @Donduck 所以我后面用 fyne 重写了,但是随随便便一个接近 hello world 的界面,运行起来都差不多 180Mb 运行内存了。。
    czyt
        12
    czyt  
       2 天前
    我用 autoit
    iorilu
        13
    iorilu  
       2 天前
    @itakeman 现在都 ai 搞得, 你不会还没用上 ai 写代码把, 学习下吧, 比你折腾其他玩意强

    现在我基本明白了

    搞 gui 即便就两条路

    要么选择该语言原生 gui, 如果有的话, 要么用 webview+web 那套

    其他都瞎折腾没意义
    yyysuo
        14
    yyysuo  
       2 天前
    @itakeman go 里面写 api ,静态单文件 html 调用 api 。vibe coding ,只需要描述自己的需求就好了,报错就扔给 ai ,可以的。
    kasusa
        15
    kasusa  
       2 天前   ❤️ 1
    https://github.com/cornradio/ahkshortcut
    都说到 ahk 了 我推荐一下自己写的小工具。
    用这个你可以把任何命令行直接变成快捷键。
    Luckykeeper
        16
    Luckykeeper  
       2 天前
    挺像的,前端苦手,最早是用的 Fyne ,后来去看了看 Godot + Go 的方案看着挺不错,稍微学了下感觉没有 Fyne 好看,于是去学了 Flutter ,现在是 Flutter + Go ,OP 不妨去试一下 Flutter ,或许有人说 Flutter 选了 Dart 作为开发语言是败笔,但是从我使用感受来看,我觉得 Dart 对于写 Go 的上手难度比 JS 那套低很多,界面做出来又好看(缺点是对上古浏览器的兼容以及加载速度这块,重一些),学会了 Flutter 还可以顺手写写客户端,很爽

    实践:Devops ,用 Go + Fyne 写过类 Ansible 的自动部署工具( C/S ),Go + Flutter 写了 k8s 的容器管理和离线升级平台(C/S),Go + Flutter 写了 k8s 微服务(B/S)等等,都很好用,自从会写 Flutter 之后就把 Fyne 扔了,太香了,想打客户端就打客户端,想打 web 包就打 web 包

    附一张图康康效果:

    https://youke1.picui.cn/s1/2025/09/24/68d35bb093a8b.png
    itakeman
        17
    itakeman  
    OP
       1 天前
    @iorilu @iorilu 有用过,就是我是业余学习的编程。完全不了解前端写代码的整过过程,自己懂得东西,有时候问 ai 都能写错,更不用说不懂的东西了,想问 ai 都无从下手

    本来想选择原生的,性能也不咋地,想着这样骚操作也能用,就不在乎了
    itakeman
        18
    itakeman  
    OP
       1 天前
    @yyysuo 感谢提示,有空试一下可行性
    itakeman
        19
    itakeman  
    OP
       1 天前   ❤️ 1
    @kasusa 哇,还有这样的神器啊,好东西啊
    itakeman
        20
    itakeman  
    OP
       1 天前
    @Luckykeeper 为了跨平台,我学习了很多,go 语言也是因为这个才学习的。为了写 ui 我最早就是学了一部分 Flutter ,因为不是从事这行业,时间也有限。学到一半,后面没时间久了就慢慢放弃了,现在拿起来都没什么勇气,感谢你的鼓励,突然有那么点动力重新拾起来
    itakeman
        21
    itakeman  
    OP
       1 天前
    @Luckykeeper 另外请教一下,Flutter + Go 交互是不是就 go 开启 web 服务,flutter 进行请求,如果这样感觉不是很完美
    blankmiss
        22
    blankmiss  
       1 天前
    为什么不用 wails
    Luckykeeper
        23
    Luckykeeper  
       1 天前
    @itakeman #21 我是 Go 开 web 服务,Flutter 去请求做的,因为我这边写的小工具需要在没有装 Docker 的情况下去操作 Docker 镜像(多架构镜像复制/单架构镜像 pull & push )去实现 k8s 应用的离线升级,您说的也有道理,如果在没有特殊需求的时候不是很完美,因为用户使用的时候他需要去开两个应用,为了缓解这个问题,能让他只打开一个应用就使用,我这里提供两个思路,不过还没实践过

    1 、参考 [微力同步] 的实现方式,不过换成 Go + Flutter ,Flutter 打 web 包,Go 的项目隐藏掉 Console ,托盘里面挂个 icon ,然后可以呼出浏览器打开你的 Flutter 项目,在 WEB 上交互,这个不开源,但是可以下载下来体验下,移动端和桌面端都有
    2 、GitHub 上有这么个项目 [ComicSparks/pikapika] (好像迁移了,我印象里面之前是挂在 niuhuan 这个号下面的),我第一次知道 Flutter 就是从他这里知道的,不过这个项目并不是完全开源,可以看下他项目 Readme 的 [Technology Stack => Multi-platform adaptation] 这部分,他的桌面端是 go-flutter ,移动端是 gomobile 然后 flutter 去调,使用起来体验非常好,可以下个他的 Release 包试试效果
    itakeman
        24
    itakeman  
    OP
       1 天前
    @blankmiss 不会写 js 、web 那一套
    wanjun
        25
    wanjun  
       1 天前
    fyne 写过,打包后 8M ,运行后占内存 23M
    itakeman
        26
    itakeman  
    OP
       23 小时 41 分钟前
    @wanjun 你这个是怎么优化的?
    icelei
        27
    icelei  
       2 小时 37 分钟前
    AHK 只能在 win 下跑,想在 mac 或者 linux 下就没办法了
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5102 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 07:21 · PVG 15:21 · LAX 00:21 · JFK 03:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.