Languages

Go

Designed at Google to build infrastructure software. Fast compilation, built-in concurrency, and a single static binary with no runtime dependencies.

ANZClearViewIAGEYQantasUnited NationsSwiss Government
The landscape
01

The language of cloud infrastructure

Much of the cloud platform layer is written in Go: Kubernetes, Docker, Terraform and Prometheus among them. The runtime multiplexes goroutines onto a small pool of operating system threads, so a single process holds tens of thousands of concurrent connections without paying for a thread each. The compiled binary ships in a container image of a few megabytes with nothing else to install.

The design of the language enforces uniformity. gofmt leaves no formatting decisions to argue over, the specification is deliberately small, and errors are values handled explicitly at each call site. Together with a compiler that rebuilds a service in seconds, this keeps a large Go codebase legible to engineers who did not write it.

Go is the right choice for network services, API gateways, event processors and platform tooling. It is the wrong choice for data and machine learning work, where the ecosystem lives in Python, and for domain-heavy business systems better served by the mature frameworks of Java or C#. A common estate shape runs Go at the platform layer, Java or C# in the application tier above it, and Python beside it for data.

Go was used by 16.4% of respondents to the 2025 Stack Overflow Developer Survey.

Go ships a new release every six months, and each release is supported until two newer major releases have shipped.

Common in Cloud infrastructure, microservices, CLI tools
Key tools Kubernetes, Docker, Terraform, Prometheus
Runtime Static binary, goroutines, GC-managed
Typical pattern gRPC services, operators, platform tooling
  • Cloud Infrastructure
  • Microservices
  • CLI Tools
  • Platform Engineering
02

Our Go capabilities

gRPC & service communication

We design service contracts in protocol buffers first and generate typed clients and servers from the definition, so the two ends of every call compile against the same schema and cannot drift apart. Deadlines, cancellation and retries propagate through context on every call, and bidirectional streaming carries the workloads a request-response shape does not fit.

  • gRPC
  • Protocol Buffers
  • Streaming

Concurrency with goroutines

Goroutines are cheap to start and easy to leak, so we apply the discipline the runtime does not impose: bounded worker pools, contexts that cancel cleanly, and channels with a single owning writer. The race detector runs in CI on every build, catching the data races that code review alone tends to miss.

  • Goroutines
  • Channels
  • Context

Platform & CLI tooling

Go cross-compiles from one machine to every platform a tool needs to run on, which is why so much operational tooling ships as a single Go binary. We build internal CLIs with Cobra and Viper, and extend Kubernetes itself with operators and custom controllers where a platform needs behaviour of its own.

  • Cobra
  • Viper
  • Bubble Tea
03

Why Adaca for Go?

04

Common Questions

Should we build new services in Go or Node.js?

Go suits services whose constraints are operational: high connection counts, low memory per instance, and fast startup under autoscaling. Node.js suits product teams already working in TypeScript, where sharing types and engineers with a React front end outweighs runtime efficiency.

The split in practice is by layer. Platform services, gateways and event processors go to Go; the API serving a front end often stays in Node.js, close to the team that consumes it.

We run Java services today, is Go worth adopting for new ones?

For domain-heavy systems with large object models, Java remains the stronger choice: its frameworks, ORMs and libraries run deeper than anything in the Go ecosystem. Go earns its place at the edges of a Java estate, in gateways, sidecars and high-throughput services where startup time and memory footprint dominate.

Mixed estates of this shape are common and stable. gRPC contracts keep both sides typed against the same schema, so the boundary costs little to maintain.

Is Go a good fit for AI-assisted development?

Go gives a coding agent one of the tightest feedback loops of any stack. The small language surface and gofmt's single canonical style make the public corpus unusually uniform, so generated Go tends to look like the Go around it. Compilation in seconds and go vet then give the agent a fast, mechanical verdict on its own output, with the test suite as the final check.

Agent work passes through the same golangci-lint rules and review gates as human work. The measured results of our AI-augmented delivery flow are on the Technology page.

How is Go work priced?

Either as a fixed cost for an initial outcome, such as a first release or a defined migration, or as a monthly rate for the team once later phases are under way. We do not publish a figure for a build, because the scale is set by the number of features, platforms, user groups and users, and projects have run from four weeks to several months. The How We Charge page sets out both models, milestone billing and the notice period.

What does the team for Go work look like?

Typically one full-time engineer on the build, with two part-time roles alongside: one running the project and one working with you on priorities and technical decisions. Teams are shaped around the system rather than around one technology, so Go work draws in the neighbouring stack when it needs to. Delivery starts under Australian leadership, with the engineering in our Manila delivery centre.

How quickly can Go work start?

Discovery establishes the scope, systems involved and delivery requirements. We agree the implementation plan and timing after that work, before implementation begins.