Why choose Go? Before I get into my list of Go learning resources, let me tell you about one of the most famous defections in all of programming history.

There was a developer in the Node.js who was so prolific that many people believed he was not a real person. They theorized that he was actually a group of developers working under one name.

That developer was TJ Holowaychuk. He authored many of the most-used npm packages, and contributed to key JavaScript libraries.

But he was indeed a real person. And one day in 2014, he decided to leave the Node community to focus on Go.

Many people sat up in their chairs. Go?

Yes. Go.

The language had reached the level of promise that even some of the most influential developers were moving toward it.

The Go community embraced TJ with open arms.

So why might such a developer prefer the relative simplicity and straight-forward syntax of Go over alternative back end languages?

For people like myself who are self taught, Go offered a great opportunity to dive into different areas of computer science and systems engineering.

Go is similar to C, but with memory safety and a runtime for built-in concurrency. And in that regard, it is far "closer to the metal", so to speak, when it comes to interfacing with the general primitives that underlie operating systems.

I now mainly build distributed systems. Prior to learning Go, my background was – like TJ – mainly in Node and JavaScript. Node does many things well, but not concurrency. And Node is no longer the tool of choice for those working on distributed systems. Instead, Go has become the go-to language.

Go as a language

Go is a statically typed compiled language famous for its straightforward, simple syntax. It addresses the common pitfalls of C while maintaining its performance and interoperability.

Despite this simplicity, Go is – at its heart – designed to handle concurrency. And it suffers from the complexity this entails.

Go is also quite idiomatic, which makes best practices a little elusive.

One of the most attractive features of Go is the ease of getting started. Learners often struggle to pick resources out of the thousands available.

With that in mind, here are some opinionated suggestions on where to start.

Essential Go
Essential Go

Essential Go provides a comprehensive overview of the language. It is an excellent resource for beginners and intermediate learners alike.

It covers the fundamental data structures of the language in depth.

It also explains concurrency and Goroutines, giving insight into idiomatic best practice.

The Little Go Book
Free to download, The Little Go Book is an introduction to Google’s Go programming language

Another good option for those look to get started quickly.

The Little Go Book covers the basics. It may be outdated, but the fundamentals it covers have not changed.

freeCodeCamp's comprehensive 7-hour dive into Go. Best tackled in chunks, this is an excellent resource for beginners.

The course content also makes it useful for intermediate Go programmers who want to recap different topics.

quii/learn-go-with-tests
Learn Go with test-driven development. Contribute to quii/learn-go-with-tests development by creating an account on GitHub.

The best way to get started is to start writing code.

Learn Go With Tests is a great introduction for learning the ins and outs of the language.

The Go Programming Language
Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.

This is the de facto source of information on new features and best practice in Go.

This blog has an excellent set of resources for developers.

New features, best practice and Go patterns are all described in detail here.

Recommend Documentation: GoDoc

https://godoc.org/

GoDoc is the most used resource by Go developers.

It is a single source for all documentation in the standard library and third party packages.

Learners are encouraged to refer to this site as a first port of call.

Once you've mastered the fundamentals of Go, this will be the only resource you need.

Finally, the reference manual for Go is a great source of information for questions you'll have as you pick things up.

As with any programming language, you will need to write code to improve. Go is flexible and has a broad variety of applications.

Find a project of interest and use Go, making particular use of GoDoc as you go along. A good place to start is https://tour.golang.org.