The Go open source project that originated at Google has reached its third anniversary, which is a good point at which to ask: Where did Go come from? Where is it now? Where is it going?

Go's third birthday on 10 November 2012 was marked with a post on the Go Programming Language Blog that reflected on how far it has come since it was announced in November 2009 as as an experimental language that:

combines the development speed of working in a dynamic language like Python with the performance and safety of a compiled language like C or C++.

Go was originally an in-house project at Google initiated by Rob Pike, Robert Griesemer and Ken Thompson, co-creator with Dennis Ritchie of both Unix and the C programming language.

Go takes its basic syntax from C - blocks of code are surrounded with curly braces and its flow of control structures include for, switch, and if. According to its FAQs it also has significant input from the Pascal/Modula/Oberon family by way of declarations and packages.

The FAQ's also explain the rationale for creating a new language:

Go was born out of frustration with existing languages and environments for systems programming. Programming had become too difficult and the choice of languages was partly to blame. One had to choose either efficient compilation, efficient execution, or ease of programming; all three were not available in the same mainstream language. Programmers who could were choosing ease over safety and efficiency by moving to dynamically typed languages such as Python and JavaScript rather than C++ or, to a lesser extent, Java.

Go is an attempt to combine the ease of programming of an interpreted, dynamically typed language with the efficiency and safety of a statically typed, compiled language. It also aims to be modern, with support for networked and multicore computing. Finally, it is intended to be fast: it should take at most a few seconds to build a large executable on a single computer.

According to Rob Pike it was the need for more speed that was the initial motivation for Go:

"The starting point was long compile times—for some of our big software at Google, build times can be unreasonably long, even with our large distributed compilation clusters. The dependency management (or lack thereof) in C and C++ results in far too much code going through the compiler."

You might say that Go was conceived while waiting for a big compilation."

A distinguishing feature of Go is its support for concurrency. In a talk at Google I/O 2012, on Go Concurrency Patterns, Rob Pike started by explaining the background to this feature.

The seminal work on concurrency according to Pike is Tony Hoare's 1978 paper "Communicating Sequential Processes". From this stemmed languages such as Occam and Erlang. plus two languages that Pike himself was involved in, Newsqueak and Limbo.

In March 2012 Go reached a major milestone with the release of the first stable version, Go 1. This was also the first release available in supported binary distributions and the first that was available for Windows as well as Linux, FreeBSD and Mac OS X.

An interactive Tour of Go is now available so that new or potential users can experience what it is like. with programs that are intended as starting points for further experimentation.

Go continues to be used by Google and the third birthday blog post mentioned some of the ways in which it is used. Notable examples are:

Other companies and projects that are using Go include BBC Worldwide, Canonical, CloudFlare, Heroku, Iron.io, Novartis, SoundCloud, SmugMug, StatHat, Tinkercad. Four of these companies share their experience of using Go in production environments in this video from Google I/O 2012:

So what does the coming year have in store for Go?

Version 1.1 is expected during 2013 with "some new functionality" but otherwise just better performance.

So far the I Programmer team has been skeptical about the need for new languages, and Google has also introduced Dart, its alternative to JavaScript. However, we do go along with idea that programming languages should be fun and effective and the Go team are very good ambassadors for suggesting that Go has these qualities.

If you want to know more see this video in which Russ Cox gives us a tour, with code, of three aspects of Go that make it fast, fun and productive - Interface, Reflection andConcurrency:

A plan is afoot to replace the Turing test as a measure of a computer's ability to think. The idea is for an annual or bi-annual Turing Championship consisting of three to five different challeng [ ... ]

During restoration work at Bletchley Park, papers which had been stuffed between the roof rafters to act as insulation were discovered and found to include unique surviving examples of Banbury Sheets. [ ... ]