My journey lerning Go

04 Jun 2025

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.