Go is just over ten years old but still feels like a newcomer on the block (probably due to my old age). It was designed at Google by Griesemer, Pike & Thompson. These guys are veterans. Thompson is well known for his work on a discarded PDP-7 which became the foundations of Unix and known for his work on the B programming language, arguably the forerunner to C. Later he worked on the Plan 9 Operating System. Pike wrote the first graphical terminal software for Unix and was heavily involved in Plan 9. Griesemer worked on the Chrome JavaScript engine (and many other things).

Programming in Go feels sufficiently flexible but at the same time the compiler is quite insistent on strong variable types and removing unused variables. For example, you cannot compare an integer with a floating point number without converting one of them. This is by design and is to prevent you from getting into trouble. Discipline. Here are some useful resources for Go.

Is there any difference? My preference is to use the official one when I'm programming on my Mac. I have both installed on a Raspberry Pi but I've yet to do any tests to determine differences. By default, the official compiler outputs a static binary and GCC outputs a dynamically linked binary (requiring the Go library).

Here are suggested directions to go further:

  • gg, a 2d graphics library. This makes it very easy to draw graphics and output png files. I used it early on in my Go learning to output The Mandelbrot Set.
  • Web Development with Go (Udemy). Once you have the basics, this course will tell you how to use Go for web applications.

The Go Gopher mascot (pictured & as the featured image was designed by Renee French and is used under the CC 3.0 Attributions license.)