When I decided to learn Go back in 2014, I bought a copy of Programming in Go by Mark Summerfield, and while I found it to be quite helpful, it’s now woefully outdated. So when people now ask me what book to read to learn Go, I’ve never been quite sure. I’m on a mission to fix this!
I just ordered six of the most recent books on Go, targeting beginners, and will be reviewing each of them here, and on my YouTube channel. I’m kicking this series off in this post, by reviewing Go Programming Language for Dummies by Wei-Meng Lee. I’m starting with this book simply because it’s the first one to arrive from my order.
Read my conclusion, or jump to individual reviews:
- Go Programming Language for Dummies by Wei-Meng Lee (this post)
- Go Programming In Easy Steps by Mike McGrath
- Learning Go by Jon Bodner
- Beginning Go Programming by Rumeel Hussain and Maryam Zulfiqar
- Learning Go Programming by Shubhangi Agarwal
- Go For Beginners by Edward Thornton
- Learn Go With Pocket-Sized Projects by Aliénor Latour, Pascal Bertrand, and Donia Chaiehloudj
- Go Fundamentals by Mark Bates and Cory LaNou
- The Go Programming Language by Alan Donovan and Brian Kernighan
- Get Programming with Go by Nathan Youngman and Roger Peppé
- For the Love of Go by John Arundel
Publication Details
Go Programming Language for Dummies; 1st edition by Wei-Meng Lee, 310 pages. Published April 27, 2021 by John Wiley & Sons, Inc.
Audience
This book claims to be for people who are new to Go (obviously), but who are “familiar with the basics of programming.”
In my estimation, only a very basic understanding of programming is assumed. It’s not quite so basic as to explain that computers use binary, and what “memory” is. But anyone with basic computer literacy probably knows this by now. If you’re familiar with Excel, you can probably understand the majority of this book.
Narrative Style
Now I’ve never read a book in the for Dummies series, and honestly, the for Dummies and for Idiots monikers both put me off a bit. But I guess someone likes the theme, because these series are popular, on just about any topic imaginable. So if you’re a fan of the for Dummies brand and style, you may wish to skip this section of the review.
The book is written in a somewhat casual and narrative style. It builds on a topic in a very conversational way, much the way I can imagine an instructor lecturing on the topic, or a friend explaining to another friend. Here’s one example, taken from the description of if
/else
:
Like humans, a program makes decisions all the time, and it’s precisely this ability that makes computers so powerful. In Go, one way you make decisions is with the if/else statement.
I can see how this would be very appealing to someone new to the concept of programming. But it has its down side, as well. In particular, it makes the text very ineffective as reference material. I remember this problem vividly, early in my career as a Perl developer, when I’d vaguely recall something I had read in the classic Learning Perl, then I’d have to spend up to an hour, reading an entire chapter… or two… to find that little tid-bit I was looking for.
As a simple example, on page 30, we find this “technical tip”:
A rune is any of the characters of certain ancient alphabets.
However, this mention of the rune type is not referenced in the index… nor are runes further explained anywhere else in the book that I can see (I will admit, I did not read the entire book word-for-word).
Content
The content covered in this book is, I would say, adequate, to get started with Go. It’s not at all in-depth, and in fact, it doesn’t even give a complete catalog of the data types available in Go. The only mention of the rune type I’ve found, for example, is the one mentioned just above. And the only mention of floating point numbers is in the section on JSON (un)marshaling.
You won’t have anything like a complete understanding of Go after finishing this book, but if you’re okay with that, then okay! With free, online resources such as the official Go specification, the basics presented in this book can easily get you off to a good start.
In addition to covering the basics of the Go language (common data types, functions, control structures, interfaces, Goroutines, and packages/modules), this book does a bit deeper dive into a couple areas, that will only be relevant for some people. Namely, JSON marshaling and unmarshaling, consuming and serving web/REST requests, and a chapter on working with MySQL.
In my view the two most glaring omissions from this book are how to use the testing
pacakge to write tests, and then the more understandable lack of Generics, as they were made available only in Go 1.18, which came out after the book’s publication.
A third topic that arguably should have been covered as well, is some of the standard tooling that comes as part of Go, such as gofmt and goimports.
Accuracy
I found a number of minor errors or inaccuracies while reading this book. One of them, already quoted above, is the description of a rune:
A rune is any of the characters of certain ancient alphabets.
This is a horrible explanation of a rune in Go. While this isn’t the place for precise explanation of a Go rune, it really has nothing to do with “ancient alphabets.” Or alphabets at all. It would have been a lot simpler to just describe a rune as “a Unicode codepoint”, or “roughly, a single character”.
More important than obscure data type trivia, however, there are a few confusing or ambiguous claims made. A good example is on page 25, which is talking about variable declarations and scope, when it says:
Variables that are defined outside of functions are accessible to all functions.
This is is just untrue, or at best ambiguous. Variables defined outside of functions are accessible to all functions in the same package, or, if they are exported (the provided example isn’t, BTW), only then are they accessible by all functions (assuming they’re not in an internal
package, anyway…)
This isn’t a terrible mistake, but it could easily lead to confusion if anyone takes the claim at face value (and why wouldn’t they)? I’ve seen enough questions on StackOverflow to know that this sort of thing will trip someone up.
And a last comment on accuracy, this is a nit-pick really. The formatting of the Go code in this book is often inconsistent. I would hope/expect a book on Go to at least run all code samples through the standard formatter, gofmt.

Physical Charactaristics
Aside from the full-color cover, the book is entirely black and white, and printed on thin, and in my opinion, low-quality, newsprint-like paper. I don’t suppose this is a problem, but I suppose I’m spoiled by the feel of O’Reilly books, on sturdier, stark white paper. I did wonder if the reason for the lower quality paper feel was that it was printed on recycled paper, but found no such claims on the cover, so I think that’s not the explanation.
Conclusion
This probably will not become my go-to book recommendation for those wanting to learn Go. There’s too much important material that’s not covered—proper use of the testing
pacakge is the biggest one!
That said, I can see this being a useful book if you like the casual narration style, and are really quite new to programming, so the sublte inconsistencies and errors won’t be as important. Just make sure you’re comfortable relying on another book or online resources when you need that deeper knowledge, or easy-to-access reference material.