When I was first learning Go, I read the excellent The Go Programming Language. It had a lot of the same clarity, conciseness and wisdom as the classic The C Programming Language book, otherwise known as K&R (Brian Kernighan was a co-author of both books). The first real program I wrote in Go was adapted from an exercise in the book; a concurrent file downloader that I expanded to be a downloader of images from various web APIs.
After programming in Go for a few years now, I haven’t referred to textbooks much. The main exception would be for topics around concurrency, where I found Katherine Cox-Buday’s Concurrency in Go to be a wonderful resource.
Recently however I have been reading Teiva Harsanyi’s 100 Go Mistakes. It’s now the book that I would recommend to every intermediate Go programmer who really wants to improve their mastery over the language. It collects a lot of the pitfalls and intricacies that I’ve either learned the hard way in the past, or had to come across in isolated articles and blog posts. I think resources like this have a lot of value for people that already know the syntax of a language, but want to improve their application of it. There’s also something quite engaging about the format of this book. Rather than just consuming passive information, you’re challenged about mistakes that you might have been making. Making mistakes is central to learning.
A nice website that covers information from the book can be found here.