When we reach for it
Ingestion, integration and anything where predictable latency and low memory matter more than expressiveness. The standard library and the single static binary make deployment and dependency management close to a non-event.
A small, fast, ruthlessly boring language for services that have to start quickly, hold steady under load, and be read by somebody who did not write them.
What we reach for first
Ingestion, integration and anything where predictable latency and low memory matter more than expressiveness. The standard library and the single static binary make deployment and dependency management close to a non-event.
It is a poor fit for heavy domain modelling, and we would not rewrite a working .NET or JVM service in it for the sake of throughput nobody has measured. Where the difficulty is business rules rather than concurrency, a richer type system earns its keep.
We reach for Go when a component has one job and has to do it under pressure — statement ingestion, image forwarding, the process sitting between two systems that disagree. The language rewards small interfaces and explicit error handling, and code review is faster because there are fewer ways to write the same thing.
Where this appears on the site
Derived from the stacks published on those pages, not written here — so this list cannot claim something the page it points at does not say.
Tell us what it is running, what it costs you today, and what you need it to do next. A senior engineer will tell you what we would keep and what we would change.