Why I Switched from TypeScript to Go
After 5 years with TypeScript, here is why Go won me over
May 14, 2026 10 min read
After 5 years with TypeScript, here is why Go won me over
May 14, 2026 10 min read
I spent five years writing TypeScript for a living, and I still reach for it on the frontend without a second thought. But somewhere around the third time I watched a Node service fall over under load that a Go binary would have shrugged off, I stopped defending the status quo and started rewriting.
TypeScript's type system is genuinely more expressive than Go's. Conditional types, mapped types, discriminated unions modeled to the byte - Go has nothing like it, and most days it does not need to. What pulled me over was everything wrapped around the language: a single static binary, a runtime that does not need babysitting, and a standard library that ships an HTTP server you would actually run in production.
With Node I was always assembling a runtime - which version, which package manager lockfile, which set of native modules that break on the CI image. Go collapses all of that into go build. The artifact is a file. It starts in milliseconds, the memory ceiling is predictable, and goroutines let me write straight-line concurrent code instead of threading callbacks and promise chains through every layer.
The ecosystem is thinner. There is no equivalent to the npm long tail, error handling is verbose in a way that genuinely annoys me on a bad day, and generics arrived late and still feel bolted on. None of that outweighed shipping services that run for months without my attention. If your bottleneck is operational reliability rather than modeling power, Go is worth the discomfort of the first month.