AOE Technology RadarAOE Technology Radar
This item was not updated in last three versions of the Radar. Should it have appeared in one of the more recent editions, there is a good chance it remains pertinent. However, if the item dates back further, its relevance may have diminished and our current evaluation could vary. Regrettably, our capacity to consistently revisit items from past Radar editions is limited.
Adopt

We have moved Go to "adopt".

Trial

We have decided to trial Go because multiple teams have successfully used it for various services and tools.

The learning curve and productivity have proven to be significant, and we are convinced that this language will gain more adoption in other teams.

Assess

2016 was the year of Go, with many open-source projects gaining significant attention, and numerous companies started to adopt it.

Go jumped from #54 to #13 on the TIOBE index in January 2017, earning the title of TIOBE programming language of the year 2016.

Here at AOE, we rely on several services written in Go on a daily basis, such as Mattermost, Docker, Consul, and Kubernetes. Moreover, more and more applications, like GitLab, are incorporating Go-based services to handle heavy workloads.

Go, as a programming language, offers several compelling features, including native support for concurrency (goroutines), statically compiled binaries with a minimal memory footprint, cross-compiling, and more. One significant advantage of Go is its shallow learning curve, enabling developers from more dynamic languages such as PHP to become proficient in a short time.

If you're interested in getting a feel for Go, you should start with the online tour. Within a day, you'll gain a good understanding of the core concepts, syntax, etc. This is partly because the language often provides only one simple way of doing things; an example of this is the defined code formatting and styling (though not enforced as in Python). Additionally, Go itself is very opinionated; for instance, composition is the preferred way of defining data structures for object-oriented programming in Go, and some developers may miss advanced concepts such as inheritance.

Currently, we use Go for projects and microservices where we require flexibility and performance.