Learning Go as a Hobby
2025-08-24
Over the last year, I’ve been experimenting with all sorts of tools and languages—from building Next.js dashboards for work, to tinkering with C# WinForms utilities, to exploring frameworks like Wails and Photino for desktop apps. Somewhere along the way, I picked up Go—not because I needed it for my day-to-day projects, but out of curiosity.
My conversations with ChatGPT often circled back to performance, concurrency, and simplicity in tooling. Whether I was converting CSV loaders, building APIs, or just trying to speed up some Python scripts, Go kept appearing as the language that could cut through complexity. It seemed to offer exactly what I was looking for: fast, reliable, and approachable code that’s fun to write.
Why Go Caught My Attention
When you’re juggling multiple stacks—JavaScript/Node.js for web, Python for data processing, C# for Windows utilities—it’s easy to feel like you’re adding complexity rather than removing it. Go stood out because it leans the other way. It’s minimalist by design, and that makes it refreshing.
- Simplicity: Go doesn’t let you get fancy with syntax for the sake of it. It encourages clarity.
- Performance: Compiled binaries run fast, and you don’t need to worry about virtual environments or dependency bloat.
- Concurrency: Goroutines and channels make parallelism accessible without diving into the headache of threads.
The first time I looked at some Go code, I thought: “This looks too simple—where’s the catch?” But the more I used it, the more I realised that was the point.
First Steps: From Node.js to Go
One of my early experiments was taking a Node.js script I’d written to process CSV files line by line and rewriting it in Go. The Node version worked fine, but it was juggling async logic, streams, and error handling in a way that made it feel heavier than it should be.
The Go version was smaller, clearer, and—crucially—faster. It handled thousands of rows without breaking a sweat, and thanks to goroutines I could split up work into batches without overthinking it.
That experience really cemented why I wanted Go in my toolkit. It wasn’t about replacing Node or Python altogether, but about having a tool that felt purpose-built for this kind of problem.
Building Small Utilities
From there, I started writing little utilities in Go just for fun. Nothing groundbreaking—just scripts to test concurrency, explore file parsing, or expose a tiny API endpoint. Each project gave me a chance to get comfortable with Go’s quirks:
- No classes, but structs and interfaces that feel surprisingly powerful.
- Error handling that forces you to deal with problems explicitly.
- The
go fmtculture that takes arguments about style off the table.
The more I played with it, the more I started thinking: “If I had to build a microservice tomorrow, I’d probably do it in Go.”
Where Go Fits in My Developer Journey
I don’t see Go as a replacement for the other languages I use—it’s more of a complement.
- C# still makes sense for desktop apps in my workflow.
- JavaScript/React is a no-brainer for web frontends.
- Python is still my go-to for quick experiments and data wrangling.
But Go slots in perfectly for backend services, CLI tools, and anything where speed and simplicity matter.
More importantly, it’s been a fun language to learn. It reminded me why I got into programming in the first place: the thrill of picking up something new, solving problems in a fresh way, and seeing ideas come to life on screen.
What’s Next?
I’d like to keep stretching Go into slightly bigger projects—maybe a small REST API for one of my automotive data pipelines, or a CLI tool that integrates with my existing dashboards. I’m also keeping an eye on frameworks like Wails that let you pair Go backends with modern web frontends (something I’m already comfortable with through React).
For now, I’m just enjoying Go as a hobby. It’s not the main language in my day-to-day work, but it’s a great reminder that learning doesn’t always have to be tied to immediate outcomes. Sometimes, picking up a new language is its own reward.