Go—often referred to as Golang—is an open source programming language that was designed by Google in 2007 with a focus on simplicity, reliability and efficiency.
The project became open source and was released publicly in 2012. It quickly gained popularity and has become a leading modern programming language.
According to the Developer Ecosystem Survey 2020, Go is among the top 10 primary languages for professional developers. In this blog we’ll briefly explore the main use cases for Go and the core benefits of the language, before diving into the key skills you need to look out for when hiring a Go developer.
What Is Go Used For?
Go was originally built by Google to help out with networking and infrastructure, replacing popular server-side languages like Java and C++. Many popular infrastructure tools such as Kubernetes, Docker and Prometheus are written in Go.
Today, this is still a central use case alongside a variety of others:
- Cloud-based or server-side applications
- Site Reliability Engineering (SRE) and DevOps
- Artificial intelligence, machine learning and data science
What Are the Benefits of Go?
Go is growing in popularity and for good reason. It has a number of stand-out benefits that distinguish it from other popular programming languages:
Go is compilable across all platforms and all hardware. It can be used as a replacement for scripting languages and is a strong competitor for other popular compiled languages.
You can use it for almost any use case: web services, system and network programming, big data, machine learning etc.
Fast and performant
Go was designed from the outset to be simple, lightweight and fast.
It is also highly conducive to automation, making it easy to scale high-performance applications that are built with Go.
Simple and easy to learn
Go is designed to be lean and therefore easy to learn. Once you have grasped its approach to interfaces and core concepts, such as Goroutines and Go channels, you can start building things.
Developers have found that they can start contributing really valuable work with Go after even only a few weeks learning the language.
Powerful concurrency support
Some consider Golang’s unique selling point to be its capacity for concurrency.
Concurrency allows a program to deal with a lot of tasks at once while minimizing resource wastage, something that many programming languages struggle to implement cleanly.,
Go features rich concurrency functions and features (such as Goroutines and Go Channels) that allow developers to implement common concurrency patterns easily and elegantly.
Key skills to look out for in a Golang developer
Overall, your dream Go developer should have strong knowledge of the core paradigms and concepts of the Go programming language as well as be well-organized and a clear communicator.
In terms of technical skills, knowledge of common Goroutine and channel patterns are the most critical, as well as experience with version control and documentation.
In this section I’ll dive into the core technical and business skills you need to look out for in a first-class Go developer.
Familiarity and expertise with Goroutines
A Goroutine is a function that executes independently of, yet simultaneously in connection with, other Goroutines in your program.
This means that you can perform tasks in Go concurrently, yet independently. So if one task gets stuck or is waiting for input, the others can continue without being blocked by errors or delays elsewhere in your application.
John Biggs and Ben Popper of Stack Overflow describe Goroutines as “worth the price of admission alone” for the Go language.
This is a non-negotiable area of expertise for any prospective Go developer, who should be very familiar with how to initiate and synchronize goroutines to build robust, highly-concurrent applications.
Go Channel patterns and frameworks
Go channels are the medium by which concurrent Goroutines communicate and share data. This mechanism allows two Goroutines to synchronize the exchange of any data that passes through them.
In many other programming languages where concurrent threads need to share data that data is ‘locked’. This creates all sorts of issues with memory management.
Go gets around this problem by sending the value in that data variable from one thread to another via Go channels, with both threads ‘waiting’ until the value reaches its destination. This ‘waiting’ guarantees the synchronization between threads, without the headaches caused by locking variables.
Your target Golang developer should be very familiar with the different types of Go channel (buffered and unbuffered) as well as how to use these to implement the most common concurrency patterns and frameworks, such as producer-consumer queues and condition variables.
All languages have features for documenting and communicating information about code. Go is no exception! But comments in Go can go further than just providing basic information.
Most magical among these features is godoc: Go’s built-in documentation tool.
Godoc scans all the Go source code for any comments and then compiles these together to automatically form that package’s documentation as HTML or plain text.
This provides an easy way to create user documentation that is tightly coupled with the relevant code: for example, you can use godoc’s web interface to move between a function’s documentation and its implementation in one click.
Go devs should be familiar with how godoc parses comments (including package-level comments, while leaving out lower levels, for example) as well as the formatting rules that godoc uses when converting comments to HTML as well as be able to write clean and effective godoc comments.
Go Templates is a simple template language for customizing outputs into different forms: web pages, emails, etc.
There are two packages—text/template and html/template—which generate text and HTML outputs, respectively.
Devs should be familiar with Go template syntax, control structures, parsing templates from files, and verifying and implementing templates.
While not strictly related to Go, knowledge of versioning tools is a must.
Version control is a system that manages changes to codebases over time, so that specific versions can be recalled. This lets everyone on an engineering team work individually on a common codebase while minimizing conflict and maximizing transparency.
As such, version control knowledge is imperative for any engineer working with modern programming languages. Experience with the most popular version control tools, such as Git, SVN, Mercurial etc., will prove incredibly valuable on your engineering team.
Business and remote skills
Alongside the technical skills, knowing how to work with the business and as part of a remote team have become equally important as part of a Go developer’s skill set.
This has become especially important since the onset of the Covid-19 pandemic. Remote working has become the new normal with engineering teams now trying to access global talent as hiring priorities shift – often with great success!
Here are a couple of the key skills to watch out for:
A lot of the above technical skills—version control, documentation etc.—rely on high-quality communication skills on behalf of the developer.
Your Go dev should be able to be clear about what they are working on, when they expect to be done, how it fits into what others are doing, as well as detail any blocks or delays that might arise.
Organization and process and task tracking
A powerful supporting skill for clear communication is great organization.
The most important organizational skill for a developer is process and task tracking. Either at the level of the whole team in terms of managing the backlog or at the level of the code in terms of managing code changes with techniques such as version control.
Familiarity with relevant software can be a plus here, ranging from Kanban-style apps such as Trello, to enterprise-grade tracking and project management software such as Jira.
Ready to get yourself a Go developer?
A top-notch Go developer will be able to balance the technical skills above with the modern requirements for business knowledge and (remote) teamwork.
If you’re looking for your dream Go developer, then check out our database of vetted, global engineering talent that can seamlessly integrate with your existing team!