Recently, I had a chance to look at this article on Github, (weird place to put an article, but okay. It was titled, “Go is not good.” And, it describes a trend of Well that was succinct and to the point. So, this is a counterargument to that article. I have done two projects in Golang, so I’m knowledgeable about the language, its benefits, and drawbacks. I’ll go into first why it was necessary when it came out, why its syntax does not bother me (it apparently does for many people), and why its lack of OOP and generics do not bother me as well.

Golang, as I stated in a previous article of mine, is the perfect replacement for any web server language, especially PHP and Ruby. Python has found another role as a scientific language, so it has another main purpose now other than web servers, and Java is still the multi-purpose king. When Golang was released in 2009, it seems like its creators knew the writing was on the wall: the gains that computer processors had made for the past decade would eventually slow down and it has. Intel has struggled to put a 10nm CPU on store shelves and we’ve spent the last seven years on the 14nm process.

With that slowdown in processor gains and the conversion from datacenters to the cloud, server spending has significantly become more regulated and cost controlled at many companies. Even companies with their own data centers are seeking maximum efficiency out of each and every processor and software. But, it also meant that the software had to adapt to a new world. Even with efficiency and speed improvements software-side, new software had to be able to run multi-threaded programs easily and concurrently, without any major hassles. And, computing might have to be spread out not only be spread out over multiple cores but over multiple processors across multiple computers.

For many companies, that meant spending more money than they had to run the software they already had on more server. It could also mean building or converting software to C++, a language with many issues and problems that have carried over from its first release over thirty years ago. And, many companies are frustrated with the amount of time spent learning, coding, and debugging C++ that they could use to implement new features on an easier language. But, an easier language meant a performance hit on some metric. Ruby, PHP, and Python all were slow due to their interpreted nature. Java had become a memory hog, using much memory to host the JVM and the software involved.

The need had arisen for a language that could combine some of the best features from Python and other languages while maintaining the speed of C++ (or something pretty close to it). Go had risen to the challenge. It was nearly as fast as C++, had first-class web server support, was simpler and easier to learn than C++, and had first-class multi-threading support using goroutines. And, with Go about to have its ten year anniversary since its first release, it has finally gotten the support and praise that it deserves. During my time at The Home Depot as an intern, Golang was one of the top languages for new features and services. Google during the same time announced that Go would be the “official” language for the Google Cloud, offering first-class support.

The Computer Language Benchmarks Game has, for the program called fasta, the C++ version takes 1.33 seconds, the Go version takes 2.07 seconds, and the Ruby, PHP, and Python versions taking around a full minute. When comparing memory usage versus Java (which is known for its huge memory footprint), the Go version takes 3.1 MB while Java takes 43.7 MB (or it could be GB). This proves that Go has taken on and beaten many of the top languages of the previous decade and it is a worthwhile prospect. This is especially true if this is something that might need to be highly scalable and highly performance orientated.

Now, many people complain about its C-style syntax and I will agree that there are many things about it that annoy me as well. Is a variable being instantiated or is it not, especially if it is part of a multi-variable return? People complain about its lack of OOP, but nobody complains about Python’s semi-OOP support and it is arguably the second most popular language in the world. It’s lacking in some areas compared to some of the other languages: dependency management, a little bit cumbersome in the variable declaration, and a little lacking in data structures. However, many of the complaints are for Go including the mascot, lack of OOP, lack of generics, non-nullable types, and its age are ridiculous and should not be considered in this day and age.

I think many of the issues that people have with Go are more syntactical than issues of performance or language features. Go is a highly capable language that is designed exactly for its use: highly performant microservices, and can evolve to become a fast modern multipurpose language.