自己用 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 这种香,
有像我这样的兄弟吗?还有更骚的操作推荐吗?推荐一下,大家一起学习一下
![]() |
1
iorilu 2 天前
现在前端都用 ai 写阿, 尤其你把命令行的接口告诉 ai, 很容易整出一个
用 wails, 主要前端比较美观 |
![]() |
2
wakarimasen 2 天前
如果不需要分发直接起 HTTP server 然后访问 localhost:[port]
|
3
Tomatopotato 2 天前
可以看看 ahk 做出的界面吗
|
4
Tomatopotato 2 天前
@wakarimasen 这确实也是个思路。直接在 go 程序里写个服务器,写个简单前端网页,打包出 exe ,双击直接跳转浏览器,相当于用浏览器当 gui 了。
|
5
roundgis 2 天前 via Android
我以前用过 autoit 写界面
|
7
itakeman OP @Tomatopotato 懒得上传了,就写了一个控制智能开关的命令行,一个界面上带了开启关闭按钮,还有设置时间间隔、时间点定时开启关闭
|
9
itakeman OP @wakarimasen 浏览器访问也不是很方便,我感觉就想着写着界面,最好安卓、win 能一起就更好了
|
10
Donduck 2 天前
AHK 也不是一个跨平台的东西啊
|
11
itakeman OP @Donduck 所以我后面用 fyne 重写了,但是随随便便一个接近 hello world 的界面,运行起来都差不多 180Mb 运行内存了。。
|
![]() |
12
czyt 2 天前
我用 autoit
|
![]() |
13
iorilu 2 天前
@itakeman 现在都 ai 搞得, 你不会还没用上 ai 写代码把, 学习下吧, 比你折腾其他玩意强
现在我基本明白了 搞 gui 即便就两条路 要么选择该语言原生 gui, 如果有的话, 要么用 webview+web 那套 其他都瞎折腾没意义 |
![]() |
15
kasusa 2 天前 ![]() |
![]() |
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 |
17
itakeman OP |
20
itakeman OP @Luckykeeper 为了跨平台,我学习了很多,go 语言也是因为这个才学习的。为了写 ui 我最早就是学了一部分 Flutter ,因为不是从事这行业,时间也有限。学到一半,后面没时间久了就慢慢放弃了,现在拿起来都没什么勇气,感谢你的鼓励,突然有那么点动力重新拾起来
|
21
itakeman OP @Luckykeeper 另外请教一下,Flutter + Go 交互是不是就 go 开启 web 服务,flutter 进行请求,如果这样感觉不是很完美
|
![]() |
22
blankmiss 1 天前
为什么不用 wails
|
![]() |
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 包试试效果 |
![]() |
25
wanjun 1 天前
fyne 写过,打包后 8M ,运行后占内存 23M
|
27
icelei 2 小时 37 分钟前
AHK 只能在 win 下跑,想在 mac 或者 linux 下就没办法了
|