我平時是做 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 應用”的可能性,也多了一個貼合我需求的小工具。
展望
目前項目已經開源,可以直接下載到安裝包:
- 項目倉庫:fintrack-backend
支持打包 Windows 和 Mac 版本,算是實現了我最初的目標。
接下來,我可能會繼續加一些功能:
- 更好看的圖表分析;
- 多賬本支持;
- 導入/導出 CSV;
- 甚至試試做移動端。
不過,就算後續不再加功能,這個項目也已經達到了我的目的:
它讓我走出了 PHP + Web 的慣性思維,嘗試了另一種可能。
很多時候,我們寫的小項目,在別人看來可能就是“又一個記賬軟件”,沒什麼價值。
但對自己來説,它代表的是一個學習過程,一個探索新方向的契機。
所以,如果你也有類似的想法,不妨直接去做。
也許別人不一定用,但你自己的收穫,已經足夠大了。