Go: A Short Review

Updated 2016-11-26

This article relates my opinion on the pros and cons of the Go programming language. In short: the pros are overwhelming while the cons are merely points of contentions.

Official documentation

The official documentation is fairly complete and well organized. It is recommended to go through the following documentation, in order:

The go-tour is an interactive introduction that covers most of the concepts of the language. It features a few challenging exercises. One of them is a virtual web-crawler: the challenge is to implement a recursive goroutine that needs to synchronize with all its instances. Here is my suggested solution.


Points of contention and other dark corners


In my opinion Go is a versatile language that is suitable to most contexts. One exception would be very low-level programming with important memory constraints (although Go allows for fine tuning of the garbage collector). Go is definitely ideal for desktop and server development.

Go is concise, technically simple and clear, pleasant to read and write, rigorous and reliable, supported by very smart tools, modern in the way that it features much of the useful progress made in language expressiveness. To top it all, its implementation is extremely efficient.

I am not sure how convenient it is in a context of math or computer graphics: it is debatable that the lack of operator overloading is detrimental.

Go’s main goal is not expressiveness though: languages such as Lua and Lisp are much more capable in this field thanks to a powerful introspection design. (Lua has metatables, Lisp is homoiconic.) This high-level expressiveness can be treacherous at the same time and I would not recommend it for team development: the risk to write unreadable code is just too high. The lack of advanced introspection capabilities makes of Go a very solid language by design.