Though this post compares Go & Rust, the underlying points succinctly explain how some of Go’s characteristics make it a fantastic fit for developing enterprise software. Enterprise software projects take time to build & tend to become large and complex. Many people (sometimes whole teams) change leaving behind a lot of code written with very varying levels of quality. Multiple teams working in parallel produce redundant code. The domain shifts over time, inevitably invalidating older assumptions and consequently causing abstractions to leak. Enterprise software development is all about scale & dealing with complexity and Go is all about suppressing complexity at scale. Here are a few Go traits that help tame the beast of enterprise software development:
- Its concurrency model makes it a good fit for server-side applications that must primarily handle multiple independent requests.
- Great support for HTTP & related protocols.
- Great tooling to diagnose concurrency and performance problems.
- Cross-compilation makes deployment on any platform easy.
- It offers a limited set of features built-in the language making it easy to learn. Go forces people to “do more with less” which ensure that Go projects remain understandable even when they scale tremendously.
- Go enforces a single, universal style via go fmt.
- There are only two levels of visibility for variables, and the only concurrency model is CSP. It’s way harder to fall into incomprehensible pitfalls when writing in Go than in other languages.
Read the full post here and I am sure you will love the author’s pragmatic conclusion as much as I did:
“Let’s avoid tying our identity to a single language and embrace practicality first and foremost.”
9 mins read