On this day in 2009, Go was officially released as an open source project. For these 9 years, the programming language has evolved significantly with 12 releases and more than 1800 contributors that are constantly improving the language.
Go is widely used by organisations such as Google (of course!), Dropbox, Netflix, SoundCloud, Twitch, Uber and a lot more. It has also emerged as a language of cloud infrastructure, with companies such as AWS, Microsoft Azure and Digital Ocean having critical components of their cloud infrastructures implemented in Go.
According to Stack Overflow 2018’s Developer Survey, Golang is one of the most loved (#5) and most wanted (#3) programming languages among developers. But what makes it so desirable? Besides the cute Gopher mascot, we all like so much, some of the major benefits of Golang are related to its simplicity and efficiency. Go is a statically typed, compiled language with some bonus advantages like memory safety, low-latency garbage collection, structural typing, and CSP-style concurrency.
Supported by the active community of the so-called Gophers, Golang is constantly evolving. Every new release of Go is aiming to improve the programming language, make it simpler and more efficient. The last major Go update was released at the end of August with a number of improvements of its runtime, toolchain and libraries. But there are also two experimental features that are particularly grabbing the attention - modules and WebAssembly (Wasm) support.
The Go “Modules” is a new concept that is an alternative to GOPATH with integrated support for versioning and package distribution. Russ Cox is describing the Go module as “a collection of packages sharing a common import path prefix, known as the module path”. Modules would allow programmers to code reliable and reproducible builds.
The latest Golang version also introduced an experimental port of WebAssembly - a binary instruction format for a stack-based virtual machine. This will allow developers to compile Go compiles programs to a binary format compatible with four major web browsers – Mozilla Firefox, Chrome, Safari and Internet Explorer. However, Modules and Wasm are currently experimental features and there are few drawbacks that need to be improved.
It seems like the best is yet to come as in 2017 the development of Go 2 was announced. The main topics currently being discussed as a starting point of the improvements in the second version of the coding language are Generics, Error values and Error handling.
Dealing with generics is not an easy task, and it’s getting harder when you are trying to find a design that fits well into the Go concept of simplicity and flexibility. Therefore, one of the discussions regarding Go version 2 is directed towards finding a solution on how to add generics while ensuring as much flexibility and power, while adding as little complexity as possible.
With regards to the Error handling, the discussion is focused on two main points – turning the error checks more lightweight and making the syntax of error handling more convenient.
Regarding the Error Values, there are two main goals stated in the initial Draft Design of Go 2. First, to improve the error handling and robustness of real programs, by making error inspection easier and less error-prone. Second, to make it possible to print errors with additional detail, in a standard form.
We can’t wait to see what the second version of Go would be. The discussion for making Golang even more functional flexible and easy-to-use is open and here you could learn more about the progress of the draft designs and to contribute to the improvement by submitting your feedback. And who knows, we may be celebrating the 10th anniversary of the language with more functional, flexible and awesome Go 2 version.