作为 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 的惯性思维,尝试了另一种可能。


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

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

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

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

相关推荐
两个人的幸福15 小时前
Windows 桌面应用自研 PHP 队列(下):完整代码与六大工程化优化
php
唐青枫19 小时前
别再把 interface 当万能盒子:Go 接口从隐式实现到项目解耦
go
米丘2 天前
vite8 vite preview 命令做了什么?
node.js·vite
blanks20202 天前
生成 公钥私钥 笔记
node.js
BingoGo3 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
JaguarJack3 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
tyung4 天前
Go 手写有界 SPSC 环形队列:无 CAS、无锁、Cache 友好的无锁模型
后端·go
用户3074596982074 天前
PHP 扩展——从入门到理解
php
糖拌西瓜皮4 天前
Java开发者视角:深入理解Node.js异步编程模型
java·后端·node.js
喵个咪4 天前
技术复盘:基于 go-wind-cms 的官网+商城双业务渐进拆分实战
后端·架构·go