How Curve is getting ahead with Golang
Golang was created for achieving maximum user efficiency and coding productivity. Programmers who are already familiar with Java or PHP can be trained in Go in just a few weeks (and many will end up preferring it). In this article, Dewet Diener explores the pros and cons of Golang and how its test driven development (TDD) is the perfect fit.
Developed and designed by Google, Golang first appeared in 2009 as a comprehensive programming language, created to maximise coding productivity. The language was created with the intent of amending deficiencies within other established languages. Despite being a young language, Golang (or simply ‘Go’) has already amassed a large following of developers and so we would like to share why at Curve we love Golang and how we are adopting it in order to achieve our objective of moving banking to the cloud.
Go is a refined programming language: it favours the principle “what you see is what you get” meaning clear legible code and fewer complex abstractions. The language itself is simple to use and easy to be trained in. Nonetheless, as a relatively new ecosystem it can be tricky to find engineers with extensive pre-existing knowledge of Go.
However, unlike other programming languages, Go was created for maximum user efficiency. Therefore developers and engineers with Java or PHP backgrounds can be upskilled and trained in using Go within a few weeks – and in our experience, many of them end up preferring it.
At Curve, we heavily advocate for test driven development (TDD) and Go’s framework aligns with this methodology. By simply naming a file
foo_test.go and adding structured test functions within that file, Go will run your unit tests quickly and efficiently. This innovative feature drives productivity as it enables more focus on test driven development and improved peer review opportunities.
Golang possesses great qualities for production optimisation such as having a small memory footprint, which supports its capability for being building blocks in large scale projects, as well as easy cross-compilation to other architectures out of the box. Since Go code is compiled into a single static binary, it allows easy containerisation and, by extension, makes it almost trivial to deploy Go into any highly available environment such as Kubernetes.
It provides a mechanism for securing workloads by having very slim production containers without any extraneous dependencies. This makes building, deploying and maintaining a Go-based estate much more straightforward and secure, and provides a solid choice for companies wishing to establish or grow their microservices strategy.
Go was created specifically to meet the needs of our rapidly growing technological ecosystem. For example, Go caters to everything you need to build APIs as part of its standard library. It’s simple to use and the performant http server eliminates some of the common exploration and design paralysis issues that can often occur when teams are designing a new project – something all too common for some other popular languages such as Java and Node.
Golang also cleverly solves code formatting disagreements through its automated formatter built into the language itself. This completely eradicates formatting disputes which, in turn, boosts productivity and focus of teams.
As much as I am an advocate for Go, it obviously isn’t without flaws either. One quarrelsome feature is that Go does not have an explicit interface, a concept many developers are accustomed to. Although not detrimental, it can make it a task to choose what interface is best suited to your struct. This is because you do not write X implements Y as you may do in other popular programming languages, but is something you soon come to terms with.
Dependency management is also another feature that was not part of the original design of the Google Golang development team. True to form, the open source community intervened and created Glide and Dep, initial efforts that did not fully solve the problem. As of Go 1.11 support has been added for modules and this seems to have become the official dependency management tool. These challenges do not diminish Go’s ingenuity as an efficient programming language, and it continues to offer significant advantages over other programming languages for us.
Golang draws the attention of keen developers across the globe and the excitement around it continues to grow. The open source community is flourishing with interesting projects; the most well known are Docker and Kubernetes.
It is this fresh and inventive, yet simple makeup that attracts us to Go: it is an exciting coding language that helps us develop quickly inside Curve to build a better product. If you would like to join Curve, please see our recruitment page for more details.