Go

As a PHP developer, I wrote a desktop application using Go for the first time

Published Time : 2025-10-21

I usually work in PHP, and in my job, I mostly write web applications. To be honest, writing for a long time inevitably leads to a bit of habitual thinking: servers, frameworks, databases API、 browser.

And this time, I made something different - a financial management desktop application written in Go.

Many people may find it strange that financial management and accounting software are already commonplace? Why do you still have to make one yourself when you search through a bunch of random items?

I didn't actually plan to make any big and comprehensive products at first, but because of a small idea: I wanted to try writing applications in Go and package them into desktop software that can run on Windows or Mac.


Why did you have this idea

In the world of PHP, it is almost impossible to bypass servers. Writing an application, even if its functionality is small, still requires a web service, and the access address may be http://localhost:8080 Then open the browser for use.

There's nothing bad about it, but the problem is:


It is still a web application, and it is just running a 'fake server' locally;

If you want to use it for others, either deploy the server or teach others how to configure the environment, it's quite troublesome;

It is not possible to generate an application that can be directly installed with just one click.


But Go gave me a completely different experience: just go build and you can compile a binary file, and even easily package across platforms.

This piqued my interest, so I came up with the idea: why not write a small tool in Go and package it into a desktop application to run and see.


Why financial management?

Why choose financial management? Because this demand happens to exist for me.

My usual expenses are basically in Alipay and WeChat. Although they have their own statistics, they cannot be combined.

I would prefer to unify the bills of the two platforms and merge the consumption categories for statistical purposes, so that I can understand where the money has been spent.

And the theme of financial management is also very suitable for practicing:


Front end: Create a management backend page for data entry, display, and statistics;

Backend: Provides API for bill storage and querying;

Additionally, try packaging it into a desktop application.


So I started working.


Some experiences during the development process

Up to now, the project has been considered the most basic and usable version. Although the function is not complicated, the experience during the process is quite interesting.

1. Go is indeed very "light"

When writing PHP, it is necessary to deploy and run services, and the framework itself will also define many structures in advance.

And Go is very simple: starting from the listening port, everything has to be implemented by oneself. It may sound troublesome, but the actual experience is completely different.

Port listening, configuration files, routing, middleware... can be completed in just a few lines of code.

Not only does it not feel like wasting time on infrastructure, but it also gives a sense of more freedom and control. This is very fresh to me.

2. The boundary between desktop and web applications

Although this is a 'desktop application', fundamentally I still adhere to the separation of front-end and back-end.

The front-end is in fintrack frontend, the back-end is in fintrack backend, and the desktop application has just changed its shell.

But the psychological feeling is different: it is no longer something in the browser address bar, but a truly "software installed on the computer".

3. Cross linguistic thinking switching

I have been writing PHP for a long time, and when I write Go, I instinctively look for frameworks and ORMs, only to find that the ecosystem of Go is completely different.

At first, it was a bit awkward, but later I realized that the simplicity of the language actually allowed me to focus more on business logic and not be led by a bunch of 'default agreements'.

It's interesting to do some 'useless' projects

To be honest, this financial management application may not be of much value to others, as there are too many ready-made tools available.

But for me, it allowed me to taste the possibility of using Go for "non web applications" and also added a small tool that fits my needs.


prospect

The project is currently open source and can be downloaded directly to the installation package:


Project Warehouse: fintrack backend


Supporting the packaging of Windows and Mac versions is considered to have achieved my initial goal.

Next, I may continue to add some features:


Better looking chart analysis;

Multi ledger support;

Import/Export CSV;

Even try making mobile devices.


However, even if no further features are added in the future, this project has already achieved my goal:

It helped me break free from the inertia of PHP+Web thinking and try another possibility.


Many times, the small projects we write may seem like 'another accounting software' to others, with little value.

But for oneself, it represents a learning process, an opportunity to explore new directions.

So, if you have a similar idea, you might as well go ahead and do it directly.

Perhaps others may not use it, but your own gains are already significant enough.