It was Todd McLeod that said something like this… "The more I learn harder it gets to ask questions, the more I ask questions the more I learn"

Before I actually start to talk about Go I wanted to talk about it's credentials and specially it's creators credentials.

Go was created by these three guys called Rob Pike, Robert Griesemer and Ken Thompson. Let's take a look at what these guys have done before Go:

Rob Pike, whom for me is like the Yoda of the computer programming world today, big fan, is best known for his work at Bell Labs, where he was a member of the Unix team and was involved in the creation of the Plan 9 from Bell Labs and Inferno operating systems, as well as the Limbo programming language. Ohh! And he also helped create something called UTF-8, you might have heard of, hopefully!

Robert Griesemer, had an early interest in programming languages and ended studying in Switzerland under the creator of Pascal, language which a lot of people will say that had a direct impact on Go. He also had about 15 years of experience working with C++ and his biggest credential in my opinion is that he got recruited by Rob and Ken to join the original Go Team at Google.

Ken Thompson, this guy is out of this world, if Yoda had a brother, Ken would be him. He also worked most of his career for Bell Labs, and he was only responsible for designing and implementing the original Unix operating system. He also invented the B programming language, the direct predecessor to the C programming language, and was one of the creators and early developers of the Plan 9 operating systems. Did you hear that he invented the language that came before C? Ok then.

Anyway, they work or worked for Google when Go was originally created.

So… Let's Go!

Perfomance:

One thing that I like to point it out is that Go is one of few languages that were created after computers had more then one core. And Go makes an exceptional use of that!

Go is a typed language that is compiled to machine code. And unlike other new languages that have relied on LLVM such as Swift and Rust, Go has been built from the ground up. And it does not depend on any layer like a virtual machine and all that stuff to run it. One other thing, Go has “goroutines”, that are much more efficient and cheaper to create than threads. You'll see.

Simplicity:

"Go was born out of frustration with existing languages and environments for systems programming. Programming had become too difficult and the choice of languages was partly to blame. One had to choose either efficient compilation, efficient execution, or ease of programming; all three were not available in the same mainstream language." https://golang.org/doc/faq

So simplicity was a key motivation and a requirement for the design and if you are serious about the language, you should definitely read this paper by Rob Pike. In Go, compile times are fast and so the immediacy of running a program feels like a scripting language, which is another win for Go when it comes to performance. And a really cool thing is that it does not suffer from continuous language changes. In fact, a big premise in Go is to have no change in the language. If you come from mobile development for example and worked with Swift, you know what that is like, to have a language that keeps changing. The Go Standard library is very good. For example the net/http library is used directly to write servers and there is no need to use layers upon layer of frameworks to write, such as in Ruby or Javascript.

Concurrency:

"Concurrency is not parallelism.", Go Proverbs

Concurrency is a huge part of Go! Go has built-in support for concurrency with Goroutines and Channels. This makes Go a natural choice for writing back-end systems with messaging, caching and scalability requirements. This is particularly attractive to programmers that are coming from the single threaded languages like Ruby, Python and others. Is not that those languages do not support multithreaded applications, but they do need some type of implementation to actually support it.

Rob Pike has a really good talk on concurrency that you can watch called Concurrency is no Parallelism, that you can check out if you are interested.

Deployment:

Go compiles everything into a statically linked binary file, so no dependencies are required, so you have a single binary to deploy. This simplifies deployment a lot. You don’t have to worry if your users have Ruby or the JVM installed for that matter. You don’t need to worry about a dependency being upgraded since the entire program is compiled into a single binary. Sweet right?!

Who else is using it?

Well, besides Google?

Here are some: Docker, Heroku, Netflix, Uber, Hashicorp, New Relic, New York Times… Well, these are just a few.

There is a whole bunch of companies using Go now a days, and it's only growing day after day. Here is a official list of companies using it around the world. And I already know of companies that use it and are not on this list.

How to start?

One really good place to start is the Go Tour, really helps you understand the basics and get some fluency, since you learn by playing around in the Go Playground. The playground is like an online code editor, where you can run small chunks of code, save it and share it with unique links. For reference we have the effective go guide. And off course there is the Go Language specification, but I think it is a little tense at first.

Those are all good places to start, but if you would like to invest a little more in it I recommend the Code School course on Go Language that is really nice to get you started, there is also a course of Udemy by Todd McLeod call Learn How To Code: Google’s Go (golang) Programming Language which I think it is really nice, and also there are a couple of books that I really recommend also, that are:

Conclusion:

Fans of Go (by the way, we are called Gophers) describe Go as having the expressiveness of dynamic languages like Python or Ruby, with the performance of compiled languages like C or C++.

So Go is a performatic and simple language, with concurrency naturally built into it, deployment being as easy as it can be, created by some of the best minds in computer programming today, supported by Google and huge community of open source developers, that has a lot of momentum and has been growing faster and faster every day.

So the question that you should be asking yourself is not, "Why you should learn Go?". But actually you should be asking yourself "Why aren't you already?"