I've been writing Go professionally since 2018 — ETL pipelines at eBay, backend services for healthcare systems, high-throughput APIs for financial data platforms. After 15+ production deployments, I have strong opinions about when Go is the right choice and when it isn't.
Where Go Wins Decisively
Concurrency-heavy workloads. Go's goroutines and channels make concurrent programming almost trivial. I built an ETL pipeline at ArdanLabs that processes thousands of network device records in parallel — the kind of work that would require careful thread management in Python or Java. In Go, it's a go keyword and a channel.
Deployment simplicity. A Go binary is a single static file. No runtime, no dependencies, no "works on my machine." You build it, copy it to a server, and run it. For containerized deployments, Go images are often under 20MB — compared to 200MB+ for Python or Node.js.
Performance per dollar. Go services typically use 5-10x less memory than equivalent Python services. For cloud deployments where you pay per GB of RAM, this translates directly to cost savings. One Go service I migrated from Python cut our monthly infrastructure bill by 60%.
Where Go Falls Short
Rapid prototyping. When I need to validate an idea quickly — a proof of concept, a data analysis script, a one-off migration — Python wins every time. Go's type system and explicit error handling are assets in production but overhead during exploration.
Data science and ML. The Python ecosystem for ML (NumPy, pandas, scikit-learn, PyTorch) is unmatched. I don't fight this — I use Python for ML work and Go for the services that consume ML outputs.
Small CRUD apps. For a simple API with basic CRUD operations, frameworks like FastAPI or Rails get you to production faster. Go's standard library is powerful but low-level — you'll write more code for the same result.
My Decision Framework
When a client asks "should we use Go?", I walk through three questions:
- Will this service need to handle high concurrency? If yes, Go is a strong candidate.
- Is operational simplicity important? If the team is small and deployment needs to be simple, Go's single-binary model is a major advantage.
- How complex is the business logic? For complex domain logic with many business rules, Go's verbosity can become a liability. Consider whether the team's productivity justifies the performance trade-off.
The best architecture uses the right tool for each component. Most of my projects use Go for performance-critical services and Python (FastAPI) for everything else. The two complement each other well.