DCX Technology RadarDCX Technology Radar

Go / Golang

coding
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 moved Go to Trial because multiple teams have used Go with success for different services and tools. The learning curve and productivity have proven to be immense and we are convinced that this language will find more adoption in other teams.

Assess

2016 was the year of Go, with a lot of Open Source projects gaining a lot of attention and many companies started to use it.

Go went from #54 to #13 on the TIOBE index in January 2017, and it became the TIOBE programming language of the year 2016.

Here at DCX, we use several services written in Go on a daily basis, such as Mattermost, Docker, Consul and Kubernetes. Also, more and more applications, such as GitLab, incorporate Go-based services to "off load" heavy work.

Go, as a programming language, has some very interesting features such as native support for concurrency (go routines), static compiled binaries with a very small memory footprint, cross compiling and much more. A big advantage of Go is the very flat learning curve, which allows developers from more dynamic languages such as PHP to be proficient in a very short time.

If you want to get a feeling for Go, you should start with the online tour, within a day you'll have a good understanding of the core concepts, syntax, etc. - that is also because the language often tries to provide only one simple way of doing things; an example for this is that code formatting and styling is defined (yet not enforced as in Python). Part of this is also that Go itself is very opinionated: So, for example, for object oriented programming in Go, composition is the preferred way of defining data structures, and some might miss advanced concepts such as inheritance.

We currently use Go for projects and microservices where we need flexibility and performance.