我平时是做 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 的惯性思维,尝试了另一种可能。


很多时候,我们写的小项目,在别人看来可能就是“又一个记账软件”,没什么价值。
但对自己来说,它代表的是一个学习过程,一个探索新方向的契机

所以,如果你也有类似的想法,不妨直接去做。
也许别人不一定用,但你自己的收获,已经足够大了。