Why Go is skyrocketing in popularity

In only two years, Golang leaped from the 65th most popular programming language to #17. Here's what's behind its rapid growth.
1004 readers like this
1004 readers like this
GitHub launches Open Source Friday 

Opensource.com

The Go programming language, sometimes referred to as Google's golang, is making strong gains in popularity. While languages such as Java and C continue to dominate programming, new models have emerged that are better suited to modern computing, particularly in the cloud. Go's increasing use is due, in part, to the fact that it is a lightweight, open source language suited for today's microservices architectures. Container darling Docker and Google's container orchestration product Kubernetes are built using Go. Go is also gaining ground in data science, with strengths that data scientists are looking for in overall performance and the ability to go from "the analyst's laptop to full production."

As an engineered language (rather than something that evolved over time), Go benefits developers in multiple ways, including garbage collection, native concurrency, and many other native capabilities that reduce the need for developers to write code to handle memory leaks or networked apps. Go also provides many other features that fit well with microservices architectures and data science.

Because of this, Go is being adopted by interesting companies and projects. Recently an API for Tensorflow has been added, and products like Pachyderm (next-gen data processing, versioning, and storage) are being built using Go. Heroku's Force.com and parts of Cloud Foundry were also written in Go. More names are being added regularly.

Rising popularity and usage

In the September 2017 TIOBE Index for Go, you can clearly see the incredible jump in Go popularity since 2016, including being named TIOBE's Programming Language Hall of Fame winner for 2016, as the programming language with the highest rise in ratings in a year. It currently stands at #17 on the monthly list, up from #19 a year ago, and up from #65 two years ago.

TIOBE Index for Go

opensource.com

The Stack Overflow Survey 2017 also shows signs of Go's rise in popularity. Stack Overflow's comprehensive survey of 64,000 developers tries to get at developers' preferences by asking about the "Most Loved, Dreaded, and Wanted Languages." This list is dominated by newer languages like Mozilla's Rust, Smalltalk, Typescript, Apple's Swift, and Google's Go. But for the third year in a row Rust, Swift, and Go made the top five "most loved" programming languages.

Most Loved, Dreaded, and Wanted Languages

opensource.com

Go advantages

Some programming languages were hacked together over time, whereas others were created academically. Still others were designed in a different age of computing with different problems, hardware, and needs. Go is an explicitly engineered language intended to solve problems with existing languages and tools while natively taking advantage of modern hardware architectures. It has been designed not only with teams of developers in mind, but also long-term maintainability.

At its core, Go is pragmatic. In the real world of IT, complex, large-scale software is written by large teams of developers. These developers typically have varying skill levels, from juniors up to seniors. Go is easy to become functional with and appropriate for junior developers to work on.

Also, having a language that encourages readability and comprehension is extremely useful. The mixture of duck typing (via interfaces) and convenience features such as ":=" for short variable declarations give Go the feel of a dynamically typed language while retaining the positives of a strongly typed one.

Go's native garbage collection removes the need for developers to do their own memory management, which helps negate two common issues:

  • First, many programmers have come to expect that memory management will be done for them.
  • Second, memory management requires different routines for different processing cores. Manually attempting to account for each configuration can significantly increase the risk of introducing memory leaks.

Go's native concurrency is a boon for network applications that live and die on concurrency. From APIs to web servers to web app frameworks, Go projects tend to focus on networking, distributed functions, and/or services for which Go's goroutines and channels are well suited.

Suited for data science

Extracting business value from large datasets is quickly becoming a competitive advantage for companies and a very active area in programming, encompassing specialties like artificial intelligence, machine learning, and more. Go has multiple strengths in these areas of data science, which is increasing its use and popularity.

  • Superior error handling and easier debugging are helping it gain popularity over Python and R, the two most commonly used data science languages.
  • Data scientists are typically not programmers. Go helps with both prototyping and production, so it ends up being a more robust language for putting data science solutions into production.
  • Performance is fantastic, which is critical given the explosion in big data and the rise of GPU databases. Go does not have to call in C/C++ based optimizations for performance gains, but gives you the ability to do so.

Seeds of Go's expansion

Software delivery and deployment have changed dramatically. Microservices architectures have become key to unlocking application agility. Modern apps are designed to be cloud-native and to take advantage of loosely coupled cloud services offered by cloud platforms.

Go is an explicitly engineered programming language, specifically designed with these new requirements in mind. Written expressly for the cloud, Go has been growing in popularity because of its mastery of concurrent operations and the beauty of its construction.

Not only is Google supporting Go, but other companies are aiding in market expansion, as well. For example, Go code is supported and expanded with enterprise-level distributions such as ActiveState's ActiveGo. As an open source movement, the golang.org site and annual GopherCon conferences form the basis of a strong, modern open source community that allows new ideas and new energy to be brought into Go's development process.

Jeff Rouse, Director of Product Management, ActiveState
Director of Product Management at ActiveState. Jeff is passionate about innovation, entrepreneurship, open source, and building great products. With over 20 years’ of experience from startups to publicly traded technology firms, Jeff has led development teams and business operations, created innovative products, and taken them to market.

15 Comments

> dominated by newer languages like Mozilla's Rust, *Smalltalk*
Smalltalk is the grandmother of all object oriented languages!

And Simula is the grandfather of all object oriented languages!

In reply to by kees (not verified)

The fad of the the moment. Go is fine, it's got its space, but that's all. Like all those languages that have arrived over the years, it's not a silver bullet, no matter what many would like to believe.

Thanks for the article, Jeff. I've read Brian Kernighan's book and used Go for a few small-ish data munging projects, but I can't get really excited by it.

My main reason is that years of programming in Java, Groovy and Python have given me an object-oriented mentality that I find hard to abandon. Besides that, I find a few irritating details - like capitalizing a name to make it public (really, a public, export, import keyword appearing once in a file is easier to find and more descriptive), or limiting the initializer ability in the for and if statements, which forces the programmer to put stuff outside the for and if that really should be in the initializer - that surprise and disappoint me, given the illustrious pedigree of the Go designers.

But anyway, as far as non-object-oriented languages go, it's usable and an improvement (from my perspective) on many earlier efforts.

TIL a new concept called "GPU Databases". Thanks for sharing this article!

Designed by Google to cater to new programmers for whom C++ is to complex.

Thanks to this article for introducing me to the Rust programming language...

I'm old enough to remember the rise and fall of Ruby, Perl, Scala, Java, PHP, ASP, VB, and I know I'm missing thousands more. Go is warming up, but it won't last. No language stays on top forever and most barely stay on top for much time at all. Just use whatever makes sense for your project. I'm sure Go is great for some and a nightmare for others. Just like all languages.

Not a fad - the C-like syntax and the raw speed makes me think that 4GL languages are finally becoming useful.
We will be building the future of the energy grid on Go programs running on Rasberry Pi's.

I don't think its a fad either, it's a really easy language to "go" with :)

Smalltalk is not a new language. It's been around for nearly half a century.
https://en.wikipedia.org/wiki/Smalltalk

Also it's not that safe, especially if you're using channels, Go could do better than simply panicking when you send to a closed channel. And there is no way to test if a channel is closed.

https://dave.cheney.net/2014/03/19/channel-axioms

You can split the implementation of (the methods on) a type over multiple files (and I've seen people do this on GitHub), which can leave you hunting around for the complete definition of a type. Couple this with implicit interfaces and you really are left with a head scratcher. Also there is no "instanceof" operator like in Java, or "conformsTo" method in Objective-C, so if you want to test for conformance to an interface at run-time, you first have to assign the variable to an empty interface and work from there.

In terms of performance, it's still way off C:
http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=go&lang2=…

"superior error handling"? See the section titled "Simplifying repetitive error handling" https://blog.golang.org/error-handling-and-go

There is nothing superior about Go's error handling. Quite the opposite. Write networking code, and you'll soon see that 75% of the code is the same error checking pattern that you can't get away from because of Go's short-sighted view on error handling.

go get has no concept of version pinning. It just pulls straight from the head of a repo. I've seen people resort to embedding what they call "vanity urls" directly in the source code that state the version dependency. To me that is just shocking.

Creative Commons LicenseThis work is licensed under a Creative Commons Attribution-Share Alike 4.0 International License.