If you must (or like to) learn Go (Golang), this article will point you in the right direction.
If you are still unsure, should you learn Go or another language, let me tell you a few facts and stats to help you make the right decision.
(Skip the following 4 paragraphs if you’ve already decided to learn Go.)
Salaries of Go developers are high. It’s all relative to your location and experience, of course. You’ll generally command a higher salary as a Go programmer than a PHP programmer (for example). And many big companies (like Google) heavily use Go in production.
Golang is not a complex, maze-like language like C++ or Java. The language documentation is thorough, very clear, and extensive. The standard library is production-ready and has many useful packages (i.e., web development, cryptography, etc.) to use in your projects right away. Static typing helps you avoid embarrassing errors and bugs in your code.
Go is becoming more popular year by year. And it’s easy to learn for a newbie. Maybe not as comfortable as learning Python (more comfortable than Java, for sure), but Go has the right balance of low-level and high-level programming. The language helps you learn how computers work inside out, and it will make you a better and more masterful programmer.
Go is a highly opinionated language. Go’s creators at Google (Rob Pike, Robert Griesemer, Ken Thompson) insist you do it all their way or no way. But they have the credibility and experience to demand that. Actually, constraints force you to write a clear and beautiful code (this is my opinion).
Anyway, you need a good learning plan.
There are many options out there, but you have to dig through the piles of mud to identify those golden nuggets. And, I’ve just made all that digging for you.
Let’s talk about your current skill level first:
- You are a green rookie who knows nothing about programming (or just a little).
- You are pretty confident and know a programming language or two.
- You are a grizzled pro who knows everything and code with eyes shut close.
Now, let’s unpack those options to select the learning plan right for your current skill level:
1. Green rookie new to programming
If you have a vague notion about programming and computers in general, you MUST start with fundamentals (and just one source won’t be enough, to better get the language, I recommend completing more than one online tutorial or course).
Sure, you can dive right into the practice, but that’s like shooting yourself in the foot upfront.
Fundamentals will serve you well during your programming career (or hobby).
Here’s a few courses/books to learn fundamentals well (some paid, some free, all involve Go somehow):
Todd McLeod’s “Learn How To Code” Golang course on Udemy
The easiest and most comprehensive option ever created. The course covers most of the fundamentals, including control flow types, how computers work, what bits and bytes are, how to read the documentation properly, and much more.
Yes, you can find almost all the information presented in this course for free, on YouTube, or in other online tutorials. Todd has a free YouTube channel teaching Golang (and other topics) to his students. But suppose you need some hand-holding or want to support the great teacher. In that case, the paid course (and Udemy often offers huge discounts, as you probably already know) is a steal and your best option (you can ask questions in a course comments section on Udemy, and Todd almost always answers on Twitter).
Actually, you’re buying two courses in a single package. He recorded the first course in 2014 or so and updated it afterward, uploading the separate second version covering the same learning material. In my opinion, the first version is better fits newbies and rookies (fundamentals explained more clearly). Still, the second version has its benefits too.
My humble opinion: watch the first version and do all the exercises (using The Go Playground from the start and installing Go when needed), then watch the second version to refresh your knowledge and pick up the missing parts.
The course has many programming exercises to help you solidify your knowledge. I have to admit that the exercises are simple, and not every exercise is useful in the real world. But you’ll remember what you’ve learned, for sure.
And Todd’s course is very personal. He’s teaching you using stories and treating you as a human, motivating you along the way (this helps you complete the course and not drop out from it in the middle of your journey). Many courses out there are simply present information and don’t actually teach.
This is an important distinction.
If you’re a genius who understands everything on the fly — this course is not for you. It’s slow, repetitive, and designed for maximum knowledge retention. I’m not a genius, and that’s why I like Todd’s courses.
If you want to learn and burn what you’ve learned right into your brain — go with Todd.
NOTE: I like the guy and his style of teaching. Maybe I’m a little biased here. Just keep this in mind when you’re deciding if this course is for you.
Go Mastery Course - Qvault
Go Mastery is not for a complete beginner, but more for the beginner who took some other online introductory courses (language doesn’t matter).
This online tutorial is a well-thought, fast-paced, and thorough resource to level up your Go game. The best interactive course I know, at least.
It covers almost all Golang quirks and idioms, preparing you for real work. You’ll be able to build simple (or maybe not so simple) backend systems after taking the Go Mastery course.
The main perk of Qvault courses is interactivity. You read about a topic (these courses are not video courses), solve a problem, and their system immediately checks if you got it right. (You can browse and read all the courses for free. Exercises are available with a paid subscription.) No local development environment is required. I never tired of repeating that practice is the only way to learn to program and never feel lost when encountering real-world code problems.
Also, Qvault is heavy on fundamentals. They know that fundamentals matter. Even if you’ve started your coding journey diving right in and not learning fundamentals, you have to learn them to level up your level of understanding and professionalism. If you don’t learn fundamentals, you’ll be stuck in a junior developer role for years to come.
Probably, you want to get a job writing Go to earn a living. After you’ve completed Go Mastery, Qvault got you covered with their “Interview Prep — Go” course. It’s an excellent review of language features (basic data structures and algorithms practice is included, of course) that often pop up during job interviews.
Remember, Qvault courses are interactive. You’re getting plenty of challenges to overcome and get experience. And without practice and exercises, you shoot yourself in the foot. Expect that your possible job offer will be handed to the next programmer who has more experience than you.
Jack Mott’s Games With Go free course on YouTube (and his site)
This course is very practical (and brilliant, in my humble opinion). It’s okay for newbies but pretty dense and fast-paced. Get ready for googling many additional topics as you learn.
Jack teaches you game development and many computer science fundamentals (algorithms, data structures, and more).
You’ll learn all the coding and CS fundamentals, 2D and 3D graphics programming, and how to make games, of course.
Here we go: https://gameswithgo.org
Head First Go by Jay McGavren
This book is a decent option for those who prefer reading to video courses.
Like every other Head First book, it’s written in an entertaining style (not everyone likes this style, but the author explains all concepts clearly — the book is easy to understand).
Head First Go requires you to know some basics (using a terminal/command line, for example), but it’s completely suitable for beginners.
The book has outstanding chapters on the internals of slices and intricacies of structs (maybe it’s mumbo-jumbo for you right now, but believe me, you have to know these topics well).
And HF Go offers a lot of simple exercises to solve various programming problems. That’s a huge fat benefit for you as a learner.
You can buy the book on Amazon or get access to it online (and to the thousands of other books and video courses) via O’Reilly Online Learning. If you’re a student, you probably have free access to O’Reilly. Ask your joint’s library for details.
An Introduction To Programming in Go by Caleb Doxsey
The oldie but a goodie. Caleb has the talent to write simply and succinctly. The book covers all Go basics, and I highly recommend it to beginners.
And it’s free!
Read it online here: http://www.golang-book.com/books/intro
He has a second published book, “Introducing Go: Build Reliable, Scalable Programs.” It has more exercises if you need that.
2. Intermediate-level programmer
You have a programming language or two under your belt, and you know some fundamentals well.
Since you’ve already had some experience, the first thing to do is to consume these three free resources:
- Go by Example: https://gobyexample.com
This is a very concise and practical language overview with details on how to write idiomatic code and all the basics.
2. Tour of Go: https://tour.golang.org
Dive into this tour from the language authors, with exercises and all the necessary info. And it goes deep fast. You’ve been warned ;-)
3. Effective Go: https://golang.org/doc/effective_go.html
This document shows you how to write idiomatic Go code and avoid common errors.
Now, after you’ve got a general feel for Golang, here’s your options to master the language:
Todd McLeod’s Web Development with Google’s Go (Golang) Programming Language
And I again recommend Todd’s course (not to annoy you, I swear).
This course starts with a quick review of the Go programming language and a few hands-on exercises to make your knowledge stick (practice rules!).
Next, you’ll learn the fundamentals of the web. Todd explains HTTP, servers, routing, templating, sessions, and more.
Don’t know how to deploy your project? Todd got you covered. He explains how to deploy on Amazon and how to scale your project.
The additional sections explain various topics like MySQL, PostgreSQL, MongoDB, and Docker. And how to work with them using Go, of course.
Everything is backed by exercises and a few projects. You’ll get your practice.
This is a massive video course that teaches you different aspects of web development and DevOps.
Go in Action by Brian Ketelsen, Erik Saint Martin, and William Kennedy
This book covers a lot of practical subjects at a fast-paced tempo.
Many people complain that this book is kinda messy and disorganized, and I agree to some degree. But it explains concurrency and channels unusually well and worth your attention anyway.
3. Grizzled professional (aka know-it-all expert)
If you pick up new languages with the speed of light, you have the following options for learning Go:
The Go Programming Language Specification
The Go Programming Language Specification
This is a reference manual for the Go programming language. For more information and other documents, see golang.org…
This is the primary source of truth about Golang. It contains everything to understand the language and its quirks.
The Go Programming Language by Alan A. A. Donovan and Brian W. Kernighan
This is the so-called “Bible” of Go, written by two iconic figures of computer science.
The book is dense, detailed, and contains all you need as a pro to learn the language inside out (including exercises in every chapter).
Ultimate Go Programming, Second Edition by William Kennedy
Bill’s video course is a deep dive into the internals of Golang. This course helps you understand language design decisions, quirks, concurrency patterns, idioms, performance optimization tricks, and memory optimization techniques.
If you already know most of the language and how to use it, Bill’s course propels you to a whole new knowledge level.
So, you have plenty of options and resources to learn Go. Estimate your current level of expertise and dive in.
This article can’t include all the available options, obviously.
Here are a few other good books I read and can recommend:
- Go in Practice: Includes 70 Techniques by Matt Butcher and Matt Farina
- Concurrency in Go: Tools and Techniques for Developers by Katherine Cox-Buday
- Go Web Programming by Sau Sheong Chang
- Black Hat Go: Go Programming For Hackers and Pentesters by Chris Patten, Dan Kottmann, and Tom Steele
Side note about editors/IDEs
If you’re a complete newbie, use Visual Studio Code from Microsoft. Install the Go plugin, and you’re good to go :-) VS Code automatically updates the tools when necessary. All that goodness is available for free, of course.
And I won’t be recommending any editor/IDE for intermediate and advanced users. Just use what you like. Be it Goland, Vim, Emacs, or even Plan 9 acme.
Affiliate earnings disclosure:
If you click on any link in this article and buy a course/book or several courses/books, I get a small cut from every sale.