A few months back, I bet my money on teaching my self Golang. There were a few reasons I wanted to take a look at Go. First one was, easy of packaging and gRPC support. The next was the concurrency model and how go routines worked. The last of the community and resources around the language and ecosystem.
After spending a few hours on youtube and reading a few articles and tutorials, I was convinced that I needed a good place for fundamentals. After all, without the basics, we are just doing guesswork based on trial and error. I looked into a few books to read and video courses to take.
I started by spending a few hours following through the Go crash course to get a feel of the language and constructs. After this was done, I got my hands on the best intro book I have ever read for a programming language Go in Action
These authors, do such an amazing job and the examples used in the book are practical and thought-provoking. The first chapter gives you a taste of how to use Goroutines and concurrency effectively in your applications. Explanations on how the internals work form Arrays, Slices, Maps to Interfaces.
This book was just great. But, I was missing something. I wanted to practice what I learned. So like in most other cases, I was thinking of something to build. Generally, when you need to use a different stack at work for a project you also end up learning the stack well. And I thought, why not. After a week or two later, I realized that this was not helping. Purely because some of the constructs and how they are used is a bit foreign to me. So I found it to be less natural. When I was thinking about a way to overcome thing I recalled watching this video by Cameron Price on Micropatterns. Here, he discussed how he was able to learn Elixir by taking small steps and solving small problems. After watching this, I decided to start the Go track exercism.io
Once starting the track I also got my self a copy of the Little Go Book, I ended up using the little go book as a reference whenever I want to refresh some topic quickly. And if I want to re-read an area completely, I would go back to the chapters involved in Go in Action. With all of these in hand, I am currently in the process of polishing up my fundamentals with Go programming.
The mentored track on exercism.io, make learning much more fun with the community giving you feedback on how to solve a problem. Looking at the published community answers for the same problem gives you insights into what was the thought process in other developers, what they did well, and what you can learn from each other.
So far, in my opinion, this has been the most productive learning experience I have had for the past 5+ years. And these micropatterns or problems I solve gives me insights into little details I would miss otherwise if I was building an entry-level app to learn the language and ecosystem.
Here is a bunch of other places you can easily find answers to your questions when you learn Go lang,