作为 PHP 开发者,我第一次用 Go 写了个桌面应用

我平时是做 PHP 的,工作里基本上都是在写 Web 应用。说实话,写久了难免有点惯性思维:服务器、框架、数据库、API、浏览器。

而这次,我做了点不一样的东西 ------ 一个用 Go 写的财务管理桌面应用

很多人可能会觉得奇怪:财务管理、记账软件,这不已经烂大街了吗?随便一搜一大堆,为什么还要自己做一个?

我其实一开始也没打算做什么大而全的产品,而是因为一个很小的念头:我想试试 Go 写应用,并打包成 Windows 或 Mac 上能跑的桌面软件


为什么会有这个念头

PHP 的世界里,几乎绕不开服务器。写一个应用,哪怕功能再小,也得起一个 Web 服务,访问地址可能是 http://localhost:8080,然后浏览器打开用。

这没什么不好,但问题是:

  • 它总归还是个 Web 应用,本地其实只是跑个"假服务器";
  • 想给别人用,要么部署服务器,要么教别人配环境,挺麻烦;
  • 没法一键生成一个"能直接安装"的应用。

而 Go 给了我一种完全不同的体验:随手 go build,就能编译出一个二进制文件,甚至还能轻松跨平台打包。

这让我很感兴趣,于是就有了这个想法:不如用 Go 写个小工具,然后打包成桌面应用跑跑看。


为什么是财务管理?

那为什么选财务管理呢?因为这个需求对我来说刚好存在

我平时的开销基本都在支付宝和微信里,虽然它们各自有统计,但没法合并在一起。

我更希望把两个平台的账单统一起来,还能对消费分类做个合并统计,好让我清楚钱都花到哪里去了。

而财务管理这个主题也很适合练手:

  • 前端:做一个管理后台页面,用来录入、展示、统计;
  • 后端:提供账单存储和查询的 API;
  • 再加上:尝试把它打包成桌面应用

于是我就开工了。


开发过程中的一些体会

做到现在,项目已经算是一个最基础可用的版本了。虽然功能不复杂,但过程里的体会挺有意思。

1. Go 确实很"轻"

写 PHP 的时候,要部署、要跑服务,框架本身也会预先定义很多结构。

而 Go 就很朴素:从监听端口开始,一切都要自己实现。听起来像是会很麻烦,但实际体验完全不是这样。

端口监听、配置文件、路由、中间件......几行代码就能完成。

不仅没有在基建上"浪费时间"的感觉,反而有一种更自由的掌控感。这对我来说很新鲜。

2. 桌面应用和 Web 应用的边界感

虽然这是"桌面应用",但本质上我还是走前后端分离。

前端在 fintrack-frontend,后端在 fintrack-backend,桌面应用只是"换了个壳子"。

可心理上的感觉不一样:它不再是浏览器地址栏里的东西,而是一个真正"装在电脑上的软件"。

3. 跨语言的思维切换

PHP 写久了,写 Go 的时候会下意识去找框架、找 ORM,结果发现 Go 的生态完全不一样。

刚开始有点别扭,但后来发现语言层面的简洁反而让我能更专注在业务逻辑上,不会被一堆"默认约定"牵着走。

4. 做点"无用"的项目很有意思

说实话,这个财务管理应用对别人来说可能没什么价值,毕竟现成的工具太多了。

但对我来说,它让我尝到了用 Go 做"非 Web 应用"的可能性,也多了一个贴合我需求的小工具。


展望

目前项目已经开源,可以直接下载到安装包:

支持打包 Windows 和 Mac 版本,算是实现了我最初的目标。

接下来,我可能会继续加一些功能:

  • 更好看的图表分析;
  • 多账本支持;
  • 导入/导出 CSV;
  • 甚至试试做移动端。

不过,就算后续不再加功能,这个项目也已经达到了我的目的:
它让我走出了 PHP + Web 的惯性思维,尝试了另一种可能。


很多时候,我们写的小项目,在别人看来可能就是"又一个记账软件",没什么价值。

但对自己来说,它代表的是一个学习过程 ,一个探索新方向的契机

所以,如果你也有类似的想法,不妨直接去做。

也许别人不一定用,但你自己的收获,已经足够大了。

相关推荐
printfLILEI18 小时前
php中的类与对象以及反序列化
linux·开发语言·php
Rain50919 小时前
mini-cc 的 MCP 协议:给 AI 装个 USB-C 接口
c语言·开发语言·前端·人工智能·架构·node.js·ai编程
华科大胡子19 小时前
AI开发者的网络卡点:Anthropic连接超时
开发语言·php
bill328227804320 小时前
AE 的 Animation Composer 描边动效玩法 + 极简 MG 制作流程(含示例)
php·composer
喵个咪21 小时前
选择第三方IAM还是自建权限体系?中小型后台系统权限架构决策指南
后端·架构·go
YANQ6621 天前
7.bundlesdf本地安装
前端·webpack·node.js
csdn_aspnet1 天前
PHP 算法 LeetCode 编号 70 - 爬楼梯
算法·leetcode·php
喵个咪1 天前
AI重构软件开发范式:框架与脚手架为何仍是生产级开发的刚需?
架构·go·ai编程
林熙蕾LXL1 天前
socket编程-TCP开发常用函数
网络协议·tcp/ip·php
m0_738120721 天前
渗透测试基础——黑盒测试下的Web漏洞挖掘与利用解析(一)
服务器·前端·网络·安全·php