Go is transforming cloud and enterprise software
The programming language Go turned 10 this year and one of its co-founders noted that in exploring other other languages like C, C++, Perl, Python, and Ruby, it took about 10 years for a new language to achieve more mainstream adoption.
This pattern repeated for almost every language I looked at: it seems to take roughly a decade of quiet, steady improvement and dissemination before a new language really takes off.
- Go turns 10, https://blog.golang.org/10years by Russ Cox, for the Go team
8 November 2019
To understand the basics of Go
Go, also known as Golang, is a statically typed, compiled programming language designed at Google by Robert Griesemer, Rob Pike, and Ken Thompson. Go is syntactically similar to C, but with memory safety, garbage collection, structural typing, and CSP-style concurrency.
- Wikipedia, https://en.wikipedia.org/wiki/Go_(programming_language)
Business Insider recently mentioned Go in coverage of The 10 fastest-growing programming languages, according to Microsoft-owned GitHub. The data came from the GitHub State of the Octoverse report https://octoverse.github.com/, where Go made the list, albeit at number 10.
Go was designed to be especially fast and easy to work with, especially for larger-scale systems (like Google’s own).
- Business Insider
Let’s explore the critical aspects of Go mentioned earlier and why they align with a new wave of distributed applications.
Modern applications demand memory-speed performance and for developers, controlling memory matters. While all languages can face memory leaks, Go is known to be particularly good at avoiding them.
Similarly, programming languages must be able to clean up memory use, making way for the next round of workloads. Again all languages suffer this dilemma, but Go is known to do better here than other languages.
Structural typing forces programmers into rigid code patterns which put more effort on the programmer. However, programs then compile more easily and code readability between developers improves.
One of the most important aspects of Go is its ability to handle communications in distributed systems, made up of individual servers, virtual machines, or containers. Since today’s scale mandates applications run across multiple nodes, the CSP-style (communicating sequential processes) concurrency of Go fits perfectly.
Go is ideal for a whole new era of distributed applications. Of course, perhaps none are yet as popular as the white hot Kubernetes, a container management system developed by Google and launched into the Cloud Native Computing Foundation, itself a home to several popular infrastructure projects written in Go.
Here are several open-source products developed in Go listed on the Go wikipedia page
CockroachDB, an open source, survivable, strongly consistent, scale-out SQL database
Docker, a set of tools for deploying Linux containers
Hugo, a static site generator
InfluxDB, an open source time-series database
Kubernetes container management system
Mattermost, a team chat system
NATS Messaging, is an open-source messaging system featuring the core design principles of performance, scalability, and ease of use
Terraform, an open source, multiple cloud infrastructure provisioning tool from HashiCorp
Other open source infrastructure products not yet listed there include
Vitess, a database clustering system for horizontal scaling of MySQL
Dgraph, an open source, low latency, high throughput, native and distributed graph database
Prometheus, open-source monitoring solution
Overall, this is an impressive list of newcomers making waves in the cloud and enterprise infrastructure market. If the turning point is 10 years, our next decade looks to see Go even more prevalent in building a new wave of distributed applications.
PS For products or projects missed above, ping me @garyorenstein on Twitter
Special thanks to my friend and colleague @DrewParoski for his detailed comments on this post which I hope to include in a follow on shortly. In particular, Drew helps dig into ease-of-use and performance details as well as the technical underpinnings of Go.