Book Review: The Go Programming Language
After launching our flagship product “Super vCenter”, I finally got a little time to catch up with my other works. One of these is to write a book review for Alan Donovan and Brian Kernighan on their new book The Go Programming Language. I received a copy a couple months ago from the publisher Pearson which also published my book VMware VI and vSphere SDK in 2009.
Although in its early stage, the Go language is in fact pretty famous with Google on its back and other high profile projects like Docker and Rocket using it. With many programming languages already out there, you may wonder why we need a new one like Go. I had the same question a while back.
Lost VMs or Containers? Too Many Consoles? Too Slow GUI? Time to learn how to "Google" and manage your VMware and clouds in a fast and secure HTML5 App.
Positioning wise, Go is higher level than C, but lower than Java. Because I already know C and Java very well, why should I care about Go? That is why I stopped after reading a simple tutorial and trying a Hello World in tutorial a while back.
Reading this book changed some of my perceptions even though I am not sure if I will use Go in my next project. As always, choosing a programming language is a matter of software nature (embedded system, agent, OS, utilities and tools, server application, client application, Web application, etc.), developer’s skill set, existing code base, etc. There isn’t one simple answer there.
As the authors stated in the book preface, “This book is meant to help readers start using Go effectively right away and to use it well, taking full advantage of Go’s language features and standard libraries to write clear, idiomatic, and efficient programs.” I think the book has really delivered what’s promised.
The book is well organized like most programming books nowadays. After the typical “Hello World” sample, it covers the basics of the language like program structure, data types, composite types, functions, methods, interfaces, then moves on the advanced topics like Goroutines and Channels, concurrency with shared variables, reflection.
Like other software engineers, I always expect high quality samples from programming books. I do not mean long and extensive samples which are nice to have at the end, but small and concise ones that show the language libraries and are close to real world use cases. The chapter I browsed the first was the chapter 8 Goroutines and Channels, which I think best exemplifies the strength of the language. The goroutines are like the threads in other language. If you want to create a heavy duty server product, that is a must. The chapter has included five samples that by themselves worth the money: clock server, echo server, chat server, concurrent Web crawler, concurrent directory traversal. I believe you can easily adapt these samples to your own projects in real world.
Within 400 pages, the authors have done a great job in introducing the language basics and advanced features. I think it’s an excellent starting point for anyone who is interested in the Go programming language for fun or next real world project.