Learning Go in public: what actually stuck
Notes from shipping small Go services after years of TypeScript. What clicked, what still feels awkward, and what I would do again.
I started learning Go the usual way: tutorials for a weekend, then a service that had to talk to Postgres and survive a deploy. The tutorials were fine. The service taught me the rest.
What stuck first was not syntax. It was how small the standard library feels once you use it. `net/http`, `context`, `encoding/json`, and `database/sql` cover a lot. Coming from Node, I kept looking for a framework and did not need one.
Error handling still feels verbose. You return `error` at almost every boundary. I hated that at first. Then I noticed I was inventing wrappers to hide it, and those wrappers made the code worse. Once I stopped fighting the pattern, the files got shorter.
Goroutines are easy to start and easy to leak. I burned time on channel tricks I barely understood. What helped more was boring structure: `errgroup`, clear cancellation, and not spawning work I could not shut down.
If you are coming from TypeScript: use Go’s types to catch mistakes at compile time. Do not try to model your whole domain in the type system on day one. Keep packages small. Prefer plain interfaces. Get a request answering before you chase elegance.