Although I started out as a full-stack developer working with Java and JavaScript, I’ve spent the last seven years deeply immersed in the world of JavaScript. It’s been quite the ride — I’ve learned the language inside and out, built countless projects for both work and fun, and found my sweet spot as someone who leans more toward backend development.
Lately, though, I felt the itch to branch out and try something new. I wanted to learn another language — something fresh, exciting, and still closely tied to backend engineering. That curiosity led me to Go: a language with clean, modern syntax, Google’s backing, and a reputation for performance and simplicity. So, here’s the story of how I started moving from a JavaScript-heavy background to exploring the world of Go.
Why Go
When I started thinking about what language to learn next, I had a few must-haves in mind: it had to be statically typed, have a clean and elegant syntax, offer solid tooling (like a fast compiler and good language server support), and be backed by a large, active community.
Go caught my attention early on. Its simplicity and focus on performance were really appealing, and its design philosophy — emphasizing clarity and efficiency — just clicked with me. As I read more about it, I found it was everything I was looking for: modern, open-source, and easy to get into without sacrificing power.
The Journey Begins
Jumping into Go was a bit of a mixed bag at first. Some of the syntax felt strange — especially things like short variable declarations (:=), struct definitions, and method receivers. For example, something like (p *Person) getName()
looked odd to me coming from an object-oriented world. Even the way you declare variables, like name := "Jack"
, took some getting used to.
One small but noticeable shift was how Go handles exports — just capitalize the first letter. That’s it. Coming from JavaScript, where export logic is more explicit, this felt a little weird at first, but I quickly adapted. There are many more examples but these were the first that stood out to me.
Despite the initial quirks, I started to appreciate Go’s simplicity and strong type system. It actually felt like a natural next step after JavaScript. Every hurdle brought with it a moment of clarity, and those “aha” moments made the learning curve feel rewarding rather than frustrating.
Creating my first app
Once I felt comfortable with the basics, I wanted to get my hands dirty. So, I decided to build a simple web-based ToDo app (like everyone else does) but with a few addons. My goals were pretty straightforward:
- Add user account creation and login authentication
- Allow users to create, update, mark as complete, and delete tasks
- Store all user and task data using SQLite
- Package everything with Docker for easy deployment
Surprisingly, the whole process went really smoothly. Go gives you everything you need to build an app from scratch, but I found it easier to lean on a few well-documented libraries that wrapped some of those tools nicely. I used Gorilla Mux for routing, implemented my own lightweight JWT authentication, and built the UI with templ templates. The docs were super helpful, and integrating everything was straightforward.
Conclusion
Learning a new language is always a bit of a challenge — especially when your thinking is shaped by years of working with another. But embracing a second language has been incredibly rewarding. Go has quickly become my go-to for backend projects. It’s modern, efficient, and aligns really well with today’s software development needs.
As I continue exploring it, I’ve started seeing challenges as opportunities. Every new concept I grasp in Go makes coding feel fresh and exciting all over again.