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 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.
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: