Don't ditch NodeJS for Golang
May 11, 2026After reading Just fucking use Go I have thoughts.
Here's some arguments that I don't agree with:
-
Go is good because you can avoid using Docker
One reason we use Docker is to ensure that external binaries are available at runtime. This can include things like
curl,ffmpeg,imagemagick, pdf converters, etc. Having the right combination of these installed, with the correct version, is a problem you'll face whether you're running a NodeJS process a Go binary. -
Go is good because it makes formatting easy
Fair point, life would be easier without having to configure your formatter and linter. Though the whole point of configuring a formatter is that you don't commit a bunch of white space changes all the time. Whether you deal with
gofmt, prettier, or anything else, developers can format their code before they commit it, and the CI pipeline can enforce it. -
No lockfile drift between dev and CI
This is not a problem I run into. The CI pipeline does a npm ci. Notably this ensures that:
If dependencies in the package lock do not match those in package.json, npm ci will exit with an error, instead of updating the package lock.
-
Deployment is a copy command
This does sound attractive. Although, for even moderately complex projects, we're often going to build a Docker image anyway (see above). And if we already did that work, we can take advantage of something like ECS, Cloud Run, etc. and get healthchecks, rollbacks, blue/green deployments, managed environment variables, etc. for free.
-
Error handling is better in Go
Your try/catch nesting hellscape doesn't make errors disappear, it just hides them until production at 2am.
The best error handling is not explicitly handling errors. That's true in any language. With a framework like NestJS, for example, unhandled errors in processing a request will result in an automatic HTTP 500. When using Prisma, a missing database record can automatically trigger an HTTP 404. No
try/catchneeded. -
Create a whole dynamic page in a few lines of code
Database, templates, and an HTTP handler in one screen
Looks a lot like React Router (v7). Or TanStack Start. Or plain Express with EJS templates.
The ORMs, dependency injection, service layers, andcontrollers/directory are never strictly needed; at some point they can be useful in managing complexity which does tend to emerge.
In conclusion: more power to anyone using Golang. For the time being I'm going to keep developing backends with NodeJS, and I'm happy to keep just one language in my head at once.